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

Javascript 在严格模式下更改变量的类型,javascript,ecmascript-6,strict-mode,Javascript,Ecmascript 6,Strict Mode,在进行关于JavaScript的PluralSight测试时,我遇到了以下问题: 假设已启用严格性,定义变量后是否可以更改变量的类型? 是的,没有限制 是的,但是你必须重新定义变量 没有 正确答案是否定的。也许我理解错了这个问题,但对我来说,它表明以下代码无效: function test() { "use strict"; let x = 12; // x is a number x = "hello world"; // x is now a string

在进行关于JavaScript的PluralSight测试时,我遇到了以下问题:

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

  • 是的,没有限制
  • 是的,但是你必须重新定义变量
  • 没有
正确答案是否定的。也许我理解错了这个问题,但对我来说,它表明以下代码无效:

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中进行快速测试后,上述代码运行良好。我还查看了中的附录C(假设这是正确的文档),没有发现在那里提到在严格模式下限制变量的类型

我是否遗漏或误解了这里的某些内容,或者这个问题是否有缺陷或可能具有误导性

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


没有上下文,这个问题就不清楚。“变量”和“类型”是什么意思

它们可以指任何东西,尽管我们通常将该短语理解为“变量(当前)持有的值的类型”的缩写(尽管“类型”本身是不明确的,表示类型或
typeof
)——当然,大多数变量可以更改其值和类型。

它可能引用了变量本身的属性,例如它的易变性、绑定的类型、存储它的范围(记录),这些属性通常不会改变。

(D)上述内容都不会改变。这个问题的前提是无效的,因为JS变量没有类型,值有类型。@nnnnnn完全同意,这个问题对我来说毫无意义。这就是为什么我认为它可能措词不当,我误解了问题的意图。我同意@nnnnnn这个问题没有意义或有缺陷:)@GibboK没有意义,有缺陷!!!不幸的是,没有上下文。每个问题都是孤立的,问题中没有代码或附加信息是的,这只是一个糟糕的问题,语言松散、不清楚。我们也不“启用严格性”或“定义变量”。谢谢,但我认为问题不在于重新声明变量或变量范围。我认为问题在于将不同类型的新值赋给先前声明的变量。
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());