var name在Javascript中产生奇怪的结果

Sha*_*Fax 13 javascript variables

让我们说我们有这个代码段:

var name = ["Apples","Oranges","Strawberries"];
console.log(name.length);
Run Code Online (Sandbox Code Playgroud)

这段代码产生了这个奇怪的结果27 !! 问题似乎是使用变量名称作为"名称",它看起来像一个保留关键字.

但任何人都可以解释为什么这种奇怪的行为?

m59*_*m59 8

它指window.name的是窗口的名称.

您可以使用窗口的名称来定位超链接,但它通常不是很有用.

更多信息window.name:https://developer.mozilla.org/en-US/docs/Web/API/Window.name

只是测试中铬:你不能阻止var namewindow.name,这是一个字符串.无论您将值设置为什么,它都将被转换为字符串,以便它是一个有效的窗口名称.那么,name.length是字符串中的字符数量.最好避免变数或对它们非常小心!

正如我从其他一些评论中看到的那样,如果你是新手,这是一个奇怪的概念.关注的是什么window.name.window.name 窗口的名称.任何使用它都是命名窗口.

捍卫Chrome的行为是合乎逻辑的:

如果这样var document = 'foo'做了它会做的事情,你会window.document用字符串覆盖- 文档对象.那将是一个很大的问题.name是的属性window就像document且具有使用替代,不应该(而且不能在Chrome).

  • @ShadowFax Chrome的行为更好!覆盖窗口的名称与覆盖文档本身相当(但不是灾难性的). (2认同)

xda*_*azz 5

在全球范围内,当你这样做时var name = ["Apples","Oranges","Strawberries"];,它就是一样的window.name = ["Apples","Oranges","Strawberries"];.

window.name必须是一个字符串,所以它分配["Apples","Oranges","Strawberries"].toString()给它"Apples,Oranges,Strawberries".