C g*_*ics 58 javascript undefined
这一行在下面做了什么?
undefined = 'A value';
Run Code Online (Sandbox Code Playgroud)
如果它没有改变undefined那么幕后会发生什么的价值呢?
Ole*_*leg 53
undefined是全局对象的属性,即它是全局范围内的变量.初始值undefined是原始值undefined.
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
所以,它只是一个变量,没有什么特别之处.现在,回答你的问题:
undefined = 'A value';尝试将字符串分配给'A value'全局变量undefinedundefined === 'A value'; // true.在严格模式下的较新浏览器中,操作会导致错误. 您可以在浏览器控制台中测试以下内容(我在这里使用现代浏览器 - Google Chrome):
undefined = true;
console.log(undefined); // undefined
// in older browsers like the older Internet Explorer it would have logged true
Run Code Online (Sandbox Code Playgroud)
undefined在上面的例子中,值不会改变.这是因为(强调我的):
在现代浏览器(JavaScript 1.8.5/Firefox 4+)中,undefined是ECMAScript 5规范中不可配置的不可写属性.
在严格模式下:
'use strict';
undefined = true; // VM358:2 Uncaught TypeError: Cannot assign to read only property 'undefined' of object
Run Code Online (Sandbox Code Playgroud)
Ori*_*iol 24
不像是true,123或者null,undefined不是文字.这意味着使用undefined 标识符不是获取未定义值的万无一失的方法.相反,可以使用void运算符,例如void 0.
默认情况下,undefined定义全局对象的属性,即全局变量.在ECMAScript 5之前,该属性是可写的,所以
undefined = "A value";
Run Code Online (Sandbox Code Playgroud)
取代它的值window.undefined,假设它没有被局部变量遮蔽.然后,如果你使用"A value" === undefined,你会得到true.并void 0 === undefined会产生false.
ECMAScript 5改变了这种行为,现在该属性不可写也不可配置.因此,undefined在非严格模式下将忽略赋值,并且将在严格模式下抛出异常.在引擎盖下,
undefined = "A value";是一个简单的任务"A value"放在引用中,并使用全局对象,引用名称"undefined"和严格标志."undefined"作为属性名称传递,"A value"作为值,并将strict标志作为throw标志传递."undefined",属性描述符{[[Value]]: "A value"}和throw标志作为参数.但是,您仍然可以声明局部undefined变量:
(function() {
var undefined = "A value";
alert(undefined); // "A value";
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3339 次 |
| 最近记录: |