Javascript,var name=1,“;类型名称“;给出“;字符串”;

Javascript, var name = 1, "typeof name" gives "string"?

本文关键字:给出 字符串 类型 Javascript var name      更新时间:2023-09-26

当我编写如下的Javascript代码时,我发现了这个奇怪的问题:

var name = 1;
alert(typeof name); // this will alert "string"
var b = 1;
alert(typeof b); // this will alert "number"

我得到了"字符串"作为"名称类型",但得到了"数字"作为"b类型",然而,我认为它们都应该是"数字"

这个代码也不会运行:

var name = 1;
if (name === 1) {
    alert("ok")
}

它不会发出警报,因为名称的类型是"字符串"!

我在Chrome和Safari中测试了上面的代码,它们都给出了相同的结果,那么为什么在这种情况下"typeof name"是"string"呢?为什么变量名"name"如此特殊?

这是浏览器的一种行为,其中窗口对象的某些属性(如名称和状态)将只接受字符串值,如果您分配任何其他类型的值,则该对象的toString()值将分配给它

var name = 1;
console.log(typeof name); // this will alert "string"
var status  = 1;
console.log(status, typeof status); //gives '1` and string
var status = {};
console.log(status, typeof status);//gives value of status as [object Object] since that is the toString() implementation of object
var b = 1;
console.log(typeof b); //

演示:Fiddle


如果使用局部变量,则此行为不适用。。。即函数中的变量

function test(){
    var name = 1;
    console.log(typeof name); // this will alert "string"
    var status  = 1;
    console.log(status, typeof status); //gives '1` and string
    var status = {};
    console.log(status, typeof status);//gives value of status as [object Object] since that is the toString() implementation of object
    var b = 1;
    console.log(typeof b); //
}
test()

演示:Fiddle

原因是window下有一个名为namewindow.name)的属性,并且它已经被定义为字符串。

当您声明一个没有作用域的变量时,它的作用域在window下。

查看有关window.name的更多信息。