js eval函数解析问题?

官方说eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
但是没有弄明白它解析数组为嘛按照扩展运算符来解析;
问题请移步到下面我自己的回答,~
图片描述

阅读 1.5k
2 个回答

你这样输出的结果实际上是

document.write(eval("'[1, 2, 3]'"))
document.write(eval("[1, 2, 3]").toString())

document.write 输出的是字符串,第一行 '[1, 2, 3]' 本身就是字符串可以直接输出,而第二行是数组,需要通过 toString() 来转换到 String 类型

[1, 2, 3].toString() // 1,2,3
function test1(a, b, c) {
    console.log(a, b, c)  
}
eval("test1(" + [1,2,3] + ")") //1 2 3
function test2(a, b, c){
    console.log(a, b,c) 
}
let arr = [1,2,3]
test2(...arr)    //1 2 3
function test3(){
    console.log(...arguments) 
}
test3(1,2,3)    //1 2 3

function test4(a) {
    console.log(a)
}

function check() {
    eval("test4(" + "arguments" +")")
}
check(1,2,3)  //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
check([1,2,3])  //Arguments [Array(3), callee: ƒ, Symbol(Symbol.iterator): ƒ]
看上去似乎跟扩展运算符差不多,但实际上,扩展运算符会将类数组当成数组处理,
但是eval似乎不会,忘大牛们帮忙分析下~
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题