举个大栗子:
//1. undefined等于null undefined == null; //ture //2. 字符串和数字比较时,字符串转数字 "0" == 0; //true "f" == 0; //false //字符串转数字时,只有在字符串是纯数字时,转对应数字,其他都转为 NaN。 // 3. 字符串和布尔比较时,都转为数字 "0" == false; //true "1" == true; //true //4. 数字和布尔比较时,布尔转数字 1 == true; //true 0 == false; //true //true 转 1, false 转0; //5.对象 和 字符串,数字比较, 都转数字。 new String("66") == "66"; //true new String("zdx") == "zdx"; //false new String("66") == 66; //true === 的用法这个比较,首先,看两边类型是否一致,不一致, 直接false,一致的话,再根据 == 的使用规则, 进行比较。
这两个 运算 跟 取反(!) 操作是 不一样 的!,注意区分。
这两个运算,是在 == 和 === 比较过后的结果,进行取反(就是对 true 和 false 取反,因为,== 和 === 的返回值 只有 true 和 false)。
简单栗子:
"0" == 0; //true "f" === 0; //false "0" != 0; //false "f" !== 0; //true&& 逻辑与
如果两侧都是布尔值, 进行布尔(AND)运算。
否则它会先计算左侧表达式,如果为 “假值”,返回这个值,如果是“真值”,计算右侧表达式,并返回计算结果。
看:
true && false; //false 1 && 2; //2 null && 2; //null 1-1 && 2; //0 2-1 && 0; //0所以,有时候就会这样写代码:
if( a==b ) start(); a == b && start(); //效果同上|| 逻辑或
它跟 && 的行为是一样的,只是它的做的是布尔(OR)运算,返回的情况相反。
如果两侧都是布尔值, 进行布尔(OR)运算。
否则它会先计算左侧表达式,如果为 “真值”,返回这个值,如果是“假值”,计算右侧表达式,并返回计算结果。
true || false; //true 1 || 2; //1 null || 2; //2 1-1 || 2; //2 2-1 || 0; //1它会计算操作数(括号里)的值,把结果转为布尔类型。“真值” 表现为true , “假值” 表现为false。
if(3-2){ console.log(666) } //6661、valueOf
返回对象本身。
2、toString
返回 "[object type]",其中type是对象的类型。
1、valueOf
返回布尔值。
2、toString
返回该对象的字符串形式。
1、valueOf
返回存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
2、toString
返回一个美式英语日期格式的字符串.
1、valueOf
返回数字值。
2、toString
返回的是原始值,String类型
根据2 8 16 (范围2 - 36)分别转为二进制 八进制 十六进制字符串,,
不带参,就默认为10, 转十进制。
例:
1、valueOf
返回字符串值。
2、toString
和valueOf 效果一样,返回字符串值。
1、valueOf
自身没有该方法,继承Object.prototype.valueOf。返回的是数组对象!