锁定老帖子 主题:5 表达式和操作符
精华帖 (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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1218 次