2015-03-31 118 views
2

我发现这个奇怪的问题,当我写类似下面的Javascript代码:Javascript,var name = 1,“typeof name”给出“string”?

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

我得到了“串”为“的typeof名”,却得到了“数”为“typeof运算B”,但是,我觉得他们两者都应该是“一把手”

而这个代码将不会运行或者:因为名字的类型是“字符串”

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

它不会发出警报了,!

我在Chrome和Safari上面测试了代码,它们都给出了相同的结果,所以在这种情况下为什么“typeof name”是“string”?为什么变量名称“name”如此特别?

+0

但它的作用像魅力(正确) - > http://jsfiddle.net/s2tnns49/1/ – 2015-03-31 03:53:23

+2

在浏览器中,[global'name'或'window.name'](https:// developer。 mozilla.org/en-US/docs/Web/API/Window/name)已被定义为始终是一个字符串。 – 2015-03-31 03:53:41

+1

@ jQuery.PHP.Magento.com不是真的......见下面 – 2015-03-31 03:58:00

回答

6

它是浏览器,其中相同的名称和状态窗口对象的某些属性,如果你指定的任何其他类型的值,则该对象的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

+0

ok,所以如果你使用name1而不是name,它会让Number正确吗? – 2015-03-31 04:03:46

+0

@ jQuery.PHP.Magento.com是的它确实 – 2015-03-31 04:04:25

+0

@ArunPJohny有趣的是,非常感谢你,我想知道除了“名称”和“状态”之外,还有其他变量有这样的行为吗?或者是否有这些“内置和特殊”变量的官方/非官方文档? – 2015-03-31 04:19:50

3

的原因是,有namewindow.namewindow命名为下一个属性,它已被定义为一个字符串。

当您声明一个没有范围的变量时,它的作用域为window

查看更多about window.name

相关问题