时间:2022-10-07 11:27:24 | 栏目:JavaScript代码 | 点击:次
以下语句的执行结果是什么?
A. undefined == null B. isNaN("100") C. parseInt("1a") === 1 D. [ ] instanceof Array
答案:
A. undefined == null 为 true; undefined === null 为 false
B. 当传入 NaN 或能被转换成 NaN 的值,isNaN 返回 true,"100"会被先转成 Number?C>100,不为 NaN,因此返回 false
C. parseInt("1a")只会解析前面是数字的部分,即只解析"1",parseInt("1a1”) === 1 也为 true
D. [ ]是个空数组,返回 true
热身完毕再来看一段代码:
if ([]) { console.log(true); }
结果输出了 true。
其实 [] 为 false,因为在等号比较时,如果有一边是 Boolean 值,会优先将左右两边的数据转为 Number,
即:
Number([]); // 0 Number(false); // 0
因此[] 为 false。
但是,但是,进行 if 判断时,会将数据转为 Boolean 类型,
即:
Boolean([]); // true
所以可以输出 true。
总结一些双等号判断时的技巧:
var test = new Boolean(); console.log(test); var test = new Boolean(0); console.log(test.valueOf()); var test = new Boolean(null); console.log(test.valueOf()); var test = new Boolean(""); console.log(test.valueOf()); var test = new Boolean(NaN); console.log(test.valueOf());
答案为:
false false false false false
原理如下:
console.log(1 + "2" + "2"); console.log(1 + +"2" + "2"); console.log("A" - "B" + "2"); console.log("A" - "B" + 2);
输出结果如何?
结果为:122 32 NaN2 NaN
解析:
对于代码 var a = 10.42; 取出 a 的整数部分,以下代码哪些是正确的?
A. parseInt( a ); B. Math.floor( a ); C. Math.ceil( a ); D. a.split('.')[0];
答案:AB
很多人看一眼就会选择ABC
解析:
A. parseInt 转换为整数,默认为 10 进制,结果为 10;
B. floor 向下取整,结果为 10 ―― floor 是地板的意思,向下取整,辅助记忆;
C. ceil 向上取整,结果为 11;
D. split 操作数必须是正则或字符串,结果为 TypeError。
下面哪些执行结果为 true?
A. 'foo' == new function(){ return String('foo'); }; B. 'foo' == new function(){ return new String('foo'); }; C. [] == 0 D. ![] E: !0
答案:
A:下面细说;
B:下面细说;
C:Number([])结果是 0,因此 C 选项正确;
D:对象总等于真,但是为什么在判断一个空对象 == true 或者 === true 得到的结果都是 false 呢?
根据我们在双等号那里的总结可知,双等号有一方为布尔值时,两边都会转换为 Number 类型,所以控制台测试空对象== true 或者 === true,实际上都是在执行 空对象==1 或者 === 1,所以才会返回 false,因此,如果你想验证对象总等于真,应该使用!{} 和 !!{} !{}; // false; !!{}; // true
E:由于 Boolean(0) == false,因此!0=true,正确。
说说 AB 选项,由于使用 new 关键字,调用 function 构造函数,结果变得出乎我们的意料。
首先我们要知道,当使用 new 调用一个构造函数时,如果内部返回了一个引用对象(数组,对象,函数等)都将覆盖 new 创建的匿名对象。
如果返回一个原始类型(无显式 return 时,其实是返回了一个 undefined),那么就返回了 new 创建的匿名对象。
如此看来,
A 选项中,构造函数内返回的是一个字符串,那么最终构造函数返回的是 new 创建的匿名对象,也就是一个空对象。
B 选项中,构造函数内部返回的是一个字符串对象,那么最终构造函数返回的是这个对象。