gpt4 book ai didi

没有初始值的 JavaScript 变量在一种情况下返回 null,在另一种情况下返回 undefined

转载 作者:行者123 更新时间:2023-11-28 13:27:22 26 4
gpt4 key购买 nike

所以我正在学习 JavaScript 并测试了下面的代码:

var name;
console.log( name );

返回null

var c;
console.log( c );

返回未定义

这是为什么?

文档指出:使用 var 语句声明且未指定初始值的变量的值未定义。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Declaring_variables

任何对官方文档的引用都会很棒!

最佳答案

如果您在浏览器中执行此操作,这是因为 name 已经存在于浏览器环境中(它是窗口的名称)。所以 var name 是一个空操作。但请看下面,null 位让我感到惊讶。

在 JavaScript 中,全局变量实际上是全局对象的属性。全局对象是全局范围*代码中 this 的值。在浏览器中,全局对象是该页面的浏览器窗口对象,因此它具有为 Window 对象定义的任何属性。其中之一是名称。 (另一个是window,它是全局对象具有的一个属性,它具有对全局对象的引用,因此即使不在全局中,您也可以使用window来引用它范围。)浏览器上的全局对象实际上非常拥挤,因为浏览器会为任何具有 id 的元素转储属性(属性名称是 id,值是是对元素的引用),还有 forms、某些浏览器上的 alldocument 以及一堆其他内容。

在浏览器之外,全局对象没有任何指向它的自动属性(好吧,除非环境添加一个),并且不会有浏览器特定的东西(但可能有特定于任何环境的东西)你已经加入了)。

<小时/>

* 除非您的脚本顶部有“use strict”,这会将其置于严格模式,在这种情况下,this未定义.

<小时/>

关于您从第一个示例中获得 null 作为输出:我发现这非常令人惊讶;我期望 "" (一个空白字符串),或者当然是窗口的名称(如果有的话)。某处的某些东西必须将 null"null" 分配给 name(其中任一者都会使其成为字符串 "null" 在我尝试过的各种浏览器上 [Chrome、Firefox、IE8、IE11])。您可以使用此页面进行尝试(jsFiddle 等给出了它们以名称运行内容的窗口,因此我不能在本示例中使用它们):

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script>
(function() {
"use strict";

display("[before] typeof name: " + typeof name);
display("[before] name: " + name);

display("Doing <code>name = null;</code>");
name = null; // Gets coerced to string "null"

display("[after] typeof name: " + typeof name);
display("[after] name: " + name);

function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
</script>
</body>
</html>

关于没有初始值的 JavaScript 变量在一种情况下返回 null,在另一种情况下返回 undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com