今天有參加面試的同學,發給了動寶兒10個超級變態面試題,說是讓我也感受一下這個酸爽,動寶兒想,獨樂樂不如眾樂樂,分享給大家感受一下。
第1題
vara=111111111111111110000,
b=1111;
a+b;
答案還是111111111111111110000.解釋是LackofprecisionfornumbersinJavaScriptaffectsbothsmallandbignumbers.但是筆者不是很明白…………….請讀者賜教!
第2題
varx=[].reverse;
x();
這個題有意思!
知識點:
? Array/reverse
Thereversemethodtransposestheelementsofthecallingarrayobjectinplace,mutatingthearray,andreturningareferencetothearray.
也就是說最后會返回這個調用者(this),可是x執行的時候是上下文是全局.那么最后返回的是window.
答案是window
第3題
Number.MIN_VALUE>0
true
第4題
[1<2<3,3<2<1]
這個題也還可以.
這個題會讓人誤以為是2>1&&2<3其實不是的.
這個題等價于
1<2=>true;
true<3=>1<3=>true;
3<2=>false;
false<1=>0<1=>true;
答案是[true,true]
第5題
//themostclassicwtf
2==[[[2]]]
這個題我是猜的.我猜的true,至于為什么…..
bothobjectsgetconvertedtostringsandinbothcasestheresultingstringis"2"我不能信服…
第6題
3.toString()
3..toString()
3...toString()
這個題也挺逗,我做對了答案是error,'3',error
你如果換一個寫法就更費解了
vara=3;
a.toString()
這個答案就是'3';
為啥呢?
因為在js中1.1,1.,.1都是合法的數字.那么在解析3.toString的時候這個.到底是屬于這個數字還是函數調用呢?只能是數字,因為3.合法啊!
第7題
(function(){
varx=y=1;
})();
console.log(y);
console.log(x);
答案是1,error
y被賦值到全局.x是局部變量.所以打印x的時候會報ReferenceError
第8題
vara=/123/,
b=/123/;
a==b
a===b
即使正則的字面量一致,他們也不相等.
答案false,false
第9題
vara=[1,2,3],
b=[1,2,3],
c=[1,2,4]
a==b
a===b
a>c
a<c
字面量相等的數組也不相等.
數組在比較大小的時候按照字典序比較
答案false,false,false,true
第10題
vara={},b=Object.prototype;
[a.prototype===b,Object.getPrototypeOf(a)===b]
知識點:
? Object/getPrototypeOf
只有Function擁有一個prototype的屬性.所以a.prototype為undefined.
而Object.getPrototypeOf(obj)返回一個具體對象的原型(該對象的內部[[prototype]]值)
答案false,true