相当不错的面试题
[ ] [ 'map' ] + [ 1 , 2 , 3 ]
这个题考的是隐式类型转换 当+ 与字符串跟 引用类型相遇的时候会全部转成字符串
[ ] [ 'a' ] + [ 1 , [ 2 , 3 ] ]
这个题考的是数组降维一旦数组转换成字符串就会直接编程字符串数组就没了
其实+ - 都是触发隐式类型转换的条件就比如+ true 是1 那么- true 就是- 1 不要被
思维禁锢
[ ] [ 'push' ] ( 1 )
这个的返回值是数字1 并不是[ 1 ] 因为push 的返回值是改变后的数组长度
( ! [ ] + [ ] ) [ + [ ] ]
这个先算括号里面的空数组去反是false + 号触发 字符串拼接就会变成字符串false 一个
空数组+ 号就会变成数字0 所以会变成 ( ! [ ] + [ ] ) [ 0 ] 也就是取字符串false [ ] 0 也就是字符串f
! [ ] + [ ] ) [ + ! ! [ ] ]
这个题考的是对于true 遇到+ 号的情况这种情况下是1 所以输出a
++ [ [ ] ] [ + [ ] ] + [ + [ ] ]
是 10 化简后 变成了 1 + [ 0 ] 数组降维变成了字符串10
parseInt ( 1010110 , 2 ) 这个的第二个用法就是第一个参数是value 第二个是进制
所以这是就是二进制的1010110 转成10 进制
let a = { } ,
b = { key: 'b' } ,
c = { key: 'c' } ;
a[ b] = 123 ;
a[ c] = 456 ;
console. log ( a[ b] )
var arr = [ 1 , 3 , 5 , 7 , 9 ] ;
function Fn ( ) {
this . arr = [ 2 , 4 , 6 , 8 , 10 ] ;
arr. forEach ( function ( ) {
console. log ( this . arr)
} )
}
new Fn ( )
像这种题看到就一定要小心 首先要看好arr 跟this . arr 然后要注意的是看回掉函数内如果是function 函数 则内部this 全部指向window 但是如果箭头函数则指向函数内部
function text ( ) {
var n = 4399 ;
function add ( ) {
n++
console. log ( n)
}
return {
add, n
}
}
var result1 = text ( ) ;
result1. add ( ) ;
result1. add ( ) ;
console. log ( result1. n)
var result2 = text ( ) ;
这个注意n n 是被赋值是抛出来得没有参加后面得运算所以还是 4399
var out = 10 ;
var inner = {
out: 25 ,
func: function ( ) {
var out = 15 ;
return this . out
}
} ;
console. log ( ( inner. func = inner. func) ( ) )
对象内得函数一旦参与运算那么内部this 就会指向window 就比如, 号运算符= 号这种
console. log ( "4" - "3" )
当我面对这种题首先就要剖析- 号运算符在进行运算的时候做了什么,那么当我们看到- 号运算符的时候,
一这个题为例,减号运算符会对左右双方数值进行进行 Number()这个函数那么这个例题就可以理解为,
Number ( 4 ) - Number ( 3 ) 所以这个最终答案是 数值类型1 ,那么举一反三的来说想要彻底知道- 号
可以做什么,首先就要知道 Number ( ) 对不同类型的转换都会有哪些返回值就好,如此我做了一下的尝试
1 console. log ( Number ( [ ] ) ) 当值为空数组时值为 0 这是因为空数组为false 所以值为0 ,
2 console. log ( Number ( [ 1 ] ) ) 当数组第一个下标有值时,值为数字或者字符串且值不为0 时
(字符串必须是数字)都可以正常转换出来,当然有一个例外第一个下标为0 则论写多少都是0 比如
number ( [ 000000000000 ] ) 数值都为0 ,返过来值为 number ( [ 1223331 ] )
或者 number ( [ "123123213" ] ) 都可以进行转换, Number ( [ 1 , 2 ] ) 那么只要超出一个下标不论是任何值
都是NaN 还有一种情况就是 Number ( [ { a: "1" } ] ) 第一个下标为对象时 也时无法转换的贼为NaN
3 那么当值为 Number ( 'a' ) 由于无法转换所致全部都是NaN 无论是只有一个还是多个。
4 那么当值为 Number ( { a: "" } ) 无论有没有值都为NaN '