论坛首页 Web前端技术论坛

5 表达式和操作符

浏览 1218 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-18  

 

    下面的准则要牢记(有的时候觉得这个规则蛮麻烦的)

   ===

     [1] 如果左右两边是同一个对象的reference,那么返回true。这种情况都是false:

     var now = new Date();

     var arr1 = [now];

     var arr2 = [now];

     arr1 === arr2 (false)

     [2] 如果左右两边是数字,那么它们的值相等就返回true。可是注意一下,1 === 1.0 (true);如果其中只要有一个是NaN,那么结果一定是false。

     [3] 如果是str,那么只要内容一样就是true。可是,这里所谓的一样是忽略编码特征的,要加入带编码的比较,用localeCompare。

     [4] true === true (true) false === false (true) undefined === undefined (true) null === null (true)

undefined === null (false)

 

     ==

     [1] 数字和str的 == 和 === 是一至的,除了下面这种:undefined == null (true)

     [2] 如果一个是str,一个是数字,就会把str转成数字,然后再比较

     [3] 如果任何一个是true或者false,会将它们转成1或者0,然后再比较

     [4] object,会先用valueOf()再用toString()去把它们转成primitive类型的比较。Date会直接调用toString()转成primitive的进行比较

     [5] 其他都应该==都是false

var a = 5/2;
undefined
a;
2.5
var b = 2.5;
undefined
a == b;
true
a === b;
true
var str1 = "I love u";
undefined
var str2 = "I love " + "u";
undefined
str1 == str2;
true
str1 === str2;
true
var arr1 = [1,2,3];
undefined
var arr2 = [1,2,3];
undefined
arr1 == arr2;
false
arr1 === arr2;
false
var c = 0/0;
undefined
c;
NaN
c == a;
false
c === a;
false
isNaN(c);
true
var now = new Date();
undefined
var arr2 = [now];
undefined
var arr3 = [now];
undefined
arr2 === arr3;
false
arr2 == arr3;
false
undefined = undefined;
undefined
undefined == undefined;
true
undefined === undefined;
true
null == null;
true
null === null;
true
null == undefined;
true
null === undefined;
false
now.toString();
"Sat Apr 18 2009 08:23:08 GMT+0800 (CST)"
var yessterday = new Date(2009,04,17);
undefined
yesterday;
null
1.0 === 1;
true
0/0 === 0/0
false

 

比较操作符

比较操作符也要考虑转换的问题。首先基本原则就是尽量往数字上转,除了一种情况,就是两个都是str,那么它们就进行字符比较。另外NaN和任何东西比较都是false。

 

Str操作符

大部分都是很正常的理解,下面一种除外

var str = "this string is " + 1 +2; //this string is 3

这明显和+的结合律矛盾,不是从左至右的,要特别注意。

 

delete操作符

它只是删除reference,并没有删除reference指向的内容。

var my = new Object( );    // Create an object named "my"
my.hire = new Date( );     // my.hire refers to a Date object
my.fire = my.hire;        // my.fire refers to the same object
delete my.hire;           // hire property is deleted; returns true
document.write(my.fire);  // But my.fire still refers to the Date object
 
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics