在严格模式下更改变量的类型

时间:2017-03-20 13:21:41

标签: javascript ecmascript-6 strict-mode

在对PluralSight进行关于JavaScript的测验时,我遇到了这个问题:

假设您已启用严格性,是否可以在定义后更改变量的类型?

  • 是的,没有限制
  • 是的,但您必须重新定义变量
  • 没有

正确的答案为。也许我已经理解了这个问题是错误的,但对我而言,这表明以下代码无效:

function test() {
    "use strict";
    let x = 12; // x is a number
    x = "hello world"; // x is now a string
    return x;
}
console.log(test());

在Chrome,Firefox和Edge中进行快速测试可以完美地运行上述代码。我还查看了ECMAScript 2016 spec中的附件C(假设这是正确的文档),并且没有提到在严格模式下限制变量类型的问题。

我在这里错过了什么或误解了什么吗?或者这个问题是否存在缺陷或可能具有误导性?

2 个答案:

答案 0 :(得分:1)

如果没有背景,问题就不明确了。它们是什么意思"变量"它们是什么意思"键入"?

他们可以引用任何东西,但通常我们理解这个短语是" 变量(当前)拥有的值的类型",(虽然"类型"本身含糊不清,意思是Type或typeof) - 当然大多数变量都可以改变它们的值和类型。
它可能已经引用了变量本身的属性 - 例如它的可变性,绑定的类型,存储的范围(记录) - 通常不会改变。

答案 1 :(得分:0)

  

这里x是一个全局变量,在外部函数中它总是返回全局变量值。   您可以在同一范围内使用 let 关键字重新声明变量,但可以在另一个范围内重新声明变量,这可能是严格的,也可能不是

function test() {
    "use strict";
    let x = 12; // x is a number  
    //let x = "hello world"; // you can't do like this
    return x;
}
        let x = "hello world"; // its ok
console.log(test());