【你敢说你懂JS吗】——JS测试
你感觉自己是JSer?来看看下面的测试……是男人就挨个琢磨,不许一顿滚动条!
1 && 3
答案:3
布尔值在"&&"运算时候,如果左为true时,总是返回右边,反之则直接返回左边
1 && "foo" || 0
答案:"foo"
布尔值在"||"运算时候,如果左为false时,总是返回右边,反之则直接返回左边
1 || "foo" && 0
答案:1
结合第1题和第2题
(1,2,3)
答案:3
","运算,直接输出最后一个
x = {shift:[].shift}; x.shift(); x.length;
答案:0
这个我也没看懂...望同仁指点...
{foo:1}[0]
答案:underfined
{foo:1}中无key为“0”的属性
[true, false][+true, +false]
答案:true
[+true, +false]为[1,0],整体[true, false][1,0]中[1,0]可看做","运算,所以整体简化为[true, false][0]
++'52'.split('')[0]
答案:6
'52'.split('')为["5", "2"],++["5", "2"][0]为6
a: b: c: d: e: f: g: 1, 2, 3, 4, 5;
答案:语法错误
控制台内返回5是因为eval(a: b: c: d: e: f: g: 1, 2, 3, 4, 5)原因
{a: 1, b: 2}[["b"]]
答案:2
[["b"]]转化为对象中key=“b”而输出
"b" + 45
答案:"b45"
隐式转换
{a:{b:2}}
答案:对象
返回含有属性a,且a为一个属性b为2的对象
(function(){}())
答案:undefined
执行空函数返回一个未定义的值
[1,2,3,4,5][0..toString.length]
答案:2
[0..toString.length]相当于(0).toString.length
({} + 'b' > {} + 'a')
答案:true
相当于比较字符串"[object Object]b"和"[object Object]a"
Number.prototype.x = function(){ return this === 123; }; (123).x();
答案:false
严格测试this为对象,123为number
Array(2).join()
答案:","
两位的空数组
vars: var vars = vars;
答案:undefined
{ foo = 123 }
答案:123
返回块中计算的结果
x = 1; (function(){return x; var x = 2;}())
答案:undefined
没有变量接收自执行函数返回值
delete [].length;
答案:false
delete只有在删除对象属性时候会返回true
RegExp.prototype.toString = function() {return this.source};/3/-/2/;
答案:1
扩展方法相当于返回/../中的内容
{break;4;}
答案:语法错误
break只能存在于循环中
'foo' == new function(){ return String('foo'); };
答案:false
"foo"为字符串,new function为对象
'foo'.split('') + []
答案:"f,o,o"
自己试下 [1,2] + [3,4]
(PS:以上问题来自一篇老外的文章,答案为我的翻译+理解,若有错误,请有节操的高端人士劈头盖脸的指正……)