javascript - 未定义为参数,赋值目标

标签 javascript undefined

基本上是两个问题,都与 undefined 的行为有关。

Q1 为什么会失败并出现引用错误:

function hello(a){
      return true;  
      }  
//var abc = undefined;
hello(abc);

但这不是:

function hello(a){
      return true;  
      }  
var abc = undefined;
hello(abc);

Q2 为什么这是一个有效的分配:

undefined = 10;

但这些不是:

null = 10;
"hello" = 10;
10 = 10;

感谢您的帮助。

最佳答案

在第一种情况下,您没有在全局对象上定义键 'abc',因此您在尝试访问它时遇到引用错误。它类似于 ruby​​ 和 python 中的 'Name error' 表示标识符是 undefined

这两个是等价的,它们都在全局对象上定义了 'abc' 键,在您的例子中是 window

var abc = undefined;
var abc;

将 undefined 定义为标识符是可行的。它定义了 window.undefined 键而不是未定义类型。这意味着:

undefined = 10;
var a;
alert(a); // Yeilds undefined
alert(window.undefined); // Yeilds 10

为了执行未定义检查,检查标识符的类型:

if (typeof identifier === 'undefined') // Performs undefined check

因为:

if (identifier === undefined) // Gives us unexpected results 
// if undefined has been assigned to

此外,undefined 不是原语。 0'string' 是原语。 null 是注释中指出的特殊单例对象。这些不是标识符,而是实际值,因此您不能按规范分配给它们。

关于 NaN 的更新:

NaN 略有不同,因为它是原始值(数字)。尝试对 NaN yields 做同样的事情:

>> typeof NaN
"number"
>> NaN = 'a'
"a"
>> 0 === NaN
false
>> 'a' === NaN
false
>> typeof NaN
"number"
>> NaN
NaN

关于javascript - 未定义为参数,赋值目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13245965/

相关文章:

javascript - 浏览器检测脚本和if语句

javascript - 为什么 canvas.toDataURL() 不会为图像生成与 Ruby 中相同的 base64?

javascript - 如何在javascript中以单引号形式获取字符串输出

javascript - Array.includes() 返回未定义

javascript - 打印数组项时显示 "undefined"

php - 无法在 exit() 中调用函数

javascript - Node.js 上的 While 循环具有异步数据

Javascript 对象莫名其妙地绑定(bind)到窗口和对象

php - 错误 : undefined index?

javascript - Dojo、dgrid 定义未定义