好吧,首先我应该问一下这是否依赖于浏览器.
我已经读过,如果找到一个无效的令牌,但代码段在该无效令牌之前有效,则在令牌之前插入分号(如果前面有换行符).
但是,由分号插入引起的错误引用的常见示例是:
return
_a+b;
Run Code Online (Sandbox Code Playgroud)
..它似乎不遵循这个规则,因为_a将是一个有效的标记.
另一方面,分解调用链按预期工作:
$('#myButton')
.click(function(){alert("Hello!")});
Run Code Online (Sandbox Code Playgroud)
有没有人对规则有更深入的描述?
Javascript允许交换变量:
var x = 1
var y = 2
[x, y] = [y, x] // y = 1 , x = 2
Run Code Online (Sandbox Code Playgroud)
和结构化的任务:
var a, b
[a, b] = [1, 2]
log(a) // 1
log(b) // 2
Run Code Online (Sandbox Code Playgroud)
当使用变量交换代替析构化赋值时,尝试交换变量会分解:
var a, b
[a, b] = [1, 2] // a = 1, b = 2
[a, b] = [b, a] // TypeError: Cannot set property '2' of undefined
Run Code Online (Sandbox Code Playgroud)
这是为什么?
对于以下fibonacci函数,它按预期工作:
function fibonacci(n) {
var nums = []
var a = b = 1
for (let i = 0; i < n; i++) {
[a, b] = [b, a + b]
nums.push(a)
}
return nums
}
console.log(fibonacci(5));
// outputs: [1,2,3,5,8]Run Code Online (Sandbox Code Playgroud)
但在我更改了两个语句的顺序后,它不起作用:
function fibonacci(n) {
var nums = []
var a = b = 1
for (let i = 0; i < n; i++) {
nums.push(a)
[a, b] = [b, a + b]
}
return nums
}
console.log(fibonacci(5));
// outputs: [1,1,1,1,1] …Run Code Online (Sandbox Code Playgroud)我能做到这一点
[a, b] = await function1(a, b)
但当我这样做时
[a, b] = await function1(a, b)
[a, b] = await function2(a, b)
我收到此错误消息
SyntaxError: Invalid left-hand side in assignment expression
[a, b] = await function1(a, b)
^
[a, b] = await function2(a, b)
Run Code Online (Sandbox Code Playgroud)
我找到了解决方法,但想知道是否有办法使我的示例起作用。
提前致谢
我有以下代码
const integerDivide = (a, b) => {
return [Math.floor(a / b), a % b]
}
let sec = 555003,
min, hr, day;
[min, sec] = integerDivide(sec, 60)
console.log(`sec: ${sec}`)
console.log(`min: ${min}`)
[hr, min] = integerDivide(min, 60)
console.log(`hr: ${hr}`)Run Code Online (Sandbox Code Playgroud)
此代码给出以下错误
Uncaught TypeError: Cannot set property '9250' of undefined
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这段代码不起作用。任何解释或更正将不胜感激。下面是代码笔链接 https://codepen.io/devbkhadka/pen/ExyyEWE?editors=1111
我尝试使用该[] = []方法在 JavaScript 中交换两个对象值,但下面的代码失败并显示错误"message": "Uncaught TypeError: Cannot set property '9' of undefined",
let dataObj={"reg_price":2, "reg_price_alt":5, "ex":9}
console.log("before: ", dataObj)
[dataObj.reg_price, dataObj.ex] = [4, 5];
console.log("after: ", dataObj)Run Code Online (Sandbox Code Playgroud)
我缺少一些语法吗?我不明白为什么这个简单的代码不起作用。
我只是注意到以下代码,如果没有立即引用oneafter let [one, two] = [1, 2],尝试[one, two] = [two, one]会崩溃:
let [one, two, three] = [1, 2, 3]
[one, two] = [two, one] // CRASH! one is not defined
console.log(one, two)Run Code Online (Sandbox Code Playgroud)
然而,简单地one在声明和交换之间添加一个 not-used突然允许代码,但不正确:
let [one, two, three] = [1, 2, 3]
one // inserted here
[one, two] = [two, one] // no longer crashes! but not actually swapping
console.log(one, two) // should be '2 1', but shows '1 2' insteadRun Code Online (Sandbox Code Playgroud)
而下面的代码给出了预期的交换效果