JavaScript 弱类型浅谈

来源:互联网 发布:win7一拖二软件 编辑:程序博客网 时间:2024/04/26 21:33

 1,强弱类型的判别;

          按照计算机语言的类型系统的设计方式,可以分为强类型和弱类型两种。二者之间的区别,就在于计算时是否可以不同类型之间对使用者透明地隐式转换。从使用者的角度来看,如果一个语言可以隐式转换它的所有类型,那么它的变量、表达式等在参与运算时,即使类型不正确,也能通过隐式转换来得到正确地类型,这对使用者而言,就好像所有类型都能进行所有运算一样,所以这样的语言被称作弱类型。与此相对,强类型语言的类型之间不一定有隐式转换。
强类型如c,在c中的算术转换中对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。
 在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型,如:



(1)若运算数中有double型或float型,则其他类型数据均转换成double类型进行运算。


(2)若运算数中最长的类型为long型.则其他类型数均转换成long型数。


(3)若运算数中最长类型为int型,则char型也转换成int型进行运算。算术转换是在运算过程中自动完成的。



 2,js弱类型的体现


 一般规律是,约束越强越不容易出错,但编写程序时也越麻烦。在JavaScript中,因为约束比较弱,所以容易出现这种错误:最简单的例子:
 var a =200;


 var b ="1";


 var c= a + b;


你可能期望c是201,但实际上它是"2001",这个错误在强类型语言中决不会出现。然而正是因为JavaScript没有这些约束,所以可以很方便地拼接数字和字符串类型。


再比如下面这个例子:
var a = '11';
a = a - '';
alert(typeof a);// -->number
“-”可以是一元运算符(取负),也可以是二元(减法运算)


在循环语句中(if,while)中,一个Object对象可以隐式的转换从BOOLEAN值。
var obj = {name:'jack'}
if(obj){
    //do more
}


比较难以发现的是在alert()函数中。
String.prototype.fn = function(){return this};
var a = 'hello';
alert(typeof a.fn()); //-->object
alert(a.fn()); //-->hello
我们知道this可以理解成当前类的实例对象,既然是对象那么typeof a.fn()自然返回是object了。
关键是最后的alert(a.fn()),a.fn()返回的明明是对象,但却隐式的转换成了字符串“hello”显示。
1 0
原创粉丝点击