相关疑难解决方法(0)

JavaScript的自动分号插入(ASI)有哪些规则?

好吧,首先我应该问一下这是否依赖于浏览器.

我已经读过,如果找到一个无效的令牌,但代码段在该无效令牌之前有效,则在令牌之前插入分号(如果前面有换行符).

但是,由分号插入引起的错误引用的常见示例是:

return
  _a+b;
Run Code Online (Sandbox Code Playgroud)

..它似乎不遵循这个规则,因为_a将是一个有效的标记.

另一方面,分解调用链按预期工作:

$('#myButton')
  .click(function(){alert("Hello!")});
Run Code Online (Sandbox Code Playgroud)

有没有人对规则有更深入的描述?

javascript automatic-semicolon-insertion

400
推荐指数
5
解决办法
15万
查看次数

解构赋值和变量交换

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)

这是为什么?

javascript destructuring variable-assignment node.js

3
推荐指数
1
解决办法
682
查看次数

当我简单地改变两个表达式的顺序时,为什么这个for循环不起作用

对于以下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)

javascript syntax

2
推荐指数
1
解决办法
62
查看次数

Javascript 解构:赋值表达式的左侧无效

我能做到这一点

[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)

我找到了解决方法,但想知道是否有办法使我的示例起作用。

提前致谢

javascript ecmascript-6

2
推荐指数
1
解决办法
1361
查看次数

链接时Javascript数组解构会出错

我有以下代码

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 syntax ecmascript-6

2
推荐指数
1
解决办法
43
查看次数

使用解构赋值交换对象属性时出现类型错误

我尝试使用该[] = []方法在 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)

我缺少一些语法吗?我不明白为什么这个简单的代码不起作用。

javascript arrays destructuring

2
推荐指数
1
解决办法
784
查看次数

关于 ES6 数组解构和交换的有趣行为

我只是注意到以下代码,如果没有立即引用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' instead
Run Code Online (Sandbox Code Playgroud)

而下面的代码给出了预期的交换效果

javascript destructuring ecmascript-6

1
推荐指数
1
解决办法
600
查看次数