javascript加性操作符:操作数中有null和undefined的情况
2014-05-16 00:56
330 查看
在《javascript 高级程序设计》第三版中,3.5.5小节讲述加性操作符,其中关于操作数有undefined和null有误。原文是:对于undefined和null,则分别调用String()函数并取得"undefined"和“null”。然而,实际操作并非如此。
1.操作数中有undefined的情况
总结:据上述结果推测,如果操作数中有一个是对象或者是字符串,则取得相对应的字符串值,然后与另一个操作数相拼接。如果操作数中有一个是布尔值,则将布尔值转化为数值,同时将另一个操作数也转换为数值,undefined转化为数值是NaN,所以布尔值与undefined相加结果为NaN。如果操作数中有一个是数值,则另一个操作数也转换为数值,于是数值和undefined相加为NaN。
2.操作数中有null的情况
总结,操作数中在有对象或者字符串的情况下,两个操作数转换为字符串,然后相拼接。在操作数有一个是布尔或者数值的情况下,null就要通过数值转换为0.
3.操作数中有布尔值的情况
总结:如果有一个操作数布尔值,另外一个操作数为对象或者字符串,那么就将布尔值转换为字符串然后进行拼接。如果有一个操作数为布尔值,另一个操作数不为对象或者字符串,则将这两个操作数都转换为数值,然后按数值相加。
1.操作数中有undefined的情况
var a = undefined; var b = null; console.log(a+b); //NaN var a = undefined; var b = 1; console.log(a+b);//NaN var a = undefined; var b = '1'; console.log(a+b);//undefined1 var a = undefined; var b = true; console.log(a+b); //NaN var a = undefined; var b = {}; console.log(a+b);//undefined[object Object] var a = undefined; var b = {toString:function(){return '+toString'}}; console.log(a+b);//undefined-toString 如果操作数中有一个是对象,则调用toString()方法取得相应的字符串然后在相加。书中原话,看后面个例子证明这句话错了 var a = undefined; var b = {valueOf:function(){return '-toString'}}; console.log(a+b);//undefined-toString 如果操作数中有一个是对象,则调用toString()方法或valueOf()取得相应的字符串然后在相加
总结:据上述结果推测,如果操作数中有一个是对象或者是字符串,则取得相对应的字符串值,然后与另一个操作数相拼接。如果操作数中有一个是布尔值,则将布尔值转化为数值,同时将另一个操作数也转换为数值,undefined转化为数值是NaN,所以布尔值与undefined相加结果为NaN。如果操作数中有一个是数值,则另一个操作数也转换为数值,于是数值和undefined相加为NaN。
2.操作数中有null的情况
var a = null; var b = 1; console.log(a+b); //1 var a = null; var b = '1'; console.log(a+b); //null1 var a = null; var b = true; console.log(a+b); //1 var a = null; var b = false; console.log(a+b); //0 var a = null; var b = {toString:function(){return '-toString'}}; console.log(a+b); //null-toString
总结,操作数中在有对象或者字符串的情况下,两个操作数转换为字符串,然后相拼接。在操作数有一个是布尔或者数值的情况下,null就要通过数值转换为0.
3.操作数中有布尔值的情况
var a = {}; var b = true; console.log(a+b); //[object Object]true var a = 1; var b = true; console.log(a+b); //2 var a = '1'; var b = true; console.log(a+b); //1true var a = true; var b = true; console.log(a+b); //2 var a = false; var b = true; console.log(a+b); //1
总结:如果有一个操作数布尔值,另外一个操作数为对象或者字符串,那么就将布尔值转换为字符串然后进行拼接。如果有一个操作数为布尔值,另一个操作数不为对象或者字符串,则将这两个操作数都转换为数值,然后按数值相加。
相关文章推荐
- JavaScript 这类弱类型的语言,在判断相等方面很麻烦,明明不是一个东西,却相等了。这里通过示例展示 null、 undefined、 0、 false、 "" 的相等情况。 var arr
- JavaScript第三课——数据类型(typeof操作符、Undefined类型、Null类型、Boolean类型)
- JavaScript数据类型(一)——typeof操作符、Boolean、Null和Undefined
- JavaScript中null与undefined分析
- JAVASCRIPT判断一个值或者控件是否为NULL,null,undefined,""的方法
- javascript 中的 null 与 undefined
- JAVASCRIPT判断一个值或者控件是否为NULL,null,undefined,""的方法
- 解剖JavaScript中的null和undefined
- 解析JavaScript中的null与undefined
- JavaScript中null, undefined 的深入探讨
- JavaScript中的null和undefined
- 解剖JavaScript中的null和undefined
- JavaScript null和undefined区别分析
- JavaScript中的null和undefined
- JavaScript中的null和undefined
- 区分JavaScript中的undefined,null和NaN
- JavaScript中的null和undefined
- 解剖JavaScript中的null和undefined
- JavaScript 中 Undefined 和 Null 类型
- 解剖JavaScript中的null和undefined