javascript中未定义的本质分析
1.列出7种数据类型(面试可能会问)
未定义的空布尔字符串数字符号对象ii。未定义的性质
Undefined是窗口对象的一个属性,它的类型是undefined。
下面解释javascript中属性的性质,因为undefined是一个属性,有必要了解undefined的性质。
三,属性的本质
对于JavaScript来说,属性不仅仅是简单的名称和值。JavaScript使用一组属性来描述属性。
让我们谈谈第一种属性,数据属性。它接近于其他语言中的属性概念。数据属性有四个特征。
Value:是属性的值。可写:确定是否可以分配属性。可枚举:确定中的是否可以枚举此属性。可配置:决定属性是否可以删除,特征值是否可以改变。补充:第二种类型的属性是getter/setter属性,它也有四个特征。(本文不使用,但可以和第一类属性一起记忆)
Getter:函数或未定义,在获取属性值时调用。Setter:函数或未定义,在设置属性值时调用。可枚举:确定中的是否可以枚举此属性。可配置:决定属性是否可以删除,特征值是否可以改变。我们通常用来定义属性的代码将生成数据属性,其中可写、可枚举和可配置默认都设置为true。我们可以使用内置函数object . getowntpropertysdescriptor来查看它,如下面的代码所示:
const print=console . log const o={ a : 1 } o . b=2//a和b都是数据属性const aa=object . getowntpropertysdescriptor(o,' a')//{value: 1,writable: true,enumerable: true,configurable : true } const bb=object . getowntpropertysdescriptor(o,' b ')/{ value : 2,writable 3: true,enumerable 33366
将此函数应用于未定义的窗口对象:
可以看出undefined是窗口数据属性的第一个属性,这个属性不能赋值(可写=false),不能由for in枚举(可枚举=false),其特征值不能删除或更改(可配置=false)。这也解释了为什么undefined的值在重新赋值后不会改变:因为可写=false
并解释为什么未定义的不能用Object.defineProperty函数再次定义:因为可配置=false
注意:如果我们想改变属性的特性或者定义访问器属性,我们可以使用Object.defineProperty
第四,未定义和空
一个问题,为什么有些编程规范要求void 0而不是undefined?现在我们分开来看一下。
Undefined type表示未定义,其类型只有一个值,即Undefined。任何变量都属于未定义类型,其值在赋值前是未定义的。通常,我们可以使用全局变量undefined(即名为undefined的变量)来表示这个值,或者使用void操作将任何表达式转换为未定义的值。
但是由于JavaScript的代码undefined是一个变量,而不是关键字,这是JavaScript语言公认的设计错误之一,建议使用void 0来获取undefined值,以免被无意篡改。
Undefined在意识形态上不同于null,null表示“已定义但为空”。因此,在实际编程中,我们一般不会给未定义的变量赋值,这样可以保证所有未定义值的变量都处于从未赋值过的自然状态。
null类型也只有一个值,即null,在语义上表示Null。与undefined不同,null是一个JavaScript关键字,因此您可以安全地使用null关键字在任何代码中获取null值。
动词(verb的缩写)摘要
Undefined是window对象的一个属性,它的类型是undefined,这个属性不是一个简单的名称-值对,它还有一组属性值。这组特征值可以通过使用对象来获得。getownpropertydescriptor函数。您可以使用Object.defineProperty函数添加用户定义的属性,也可以在现有属性的可配置特征值为真的前提下,使用该函数修改现有属性的特征值。
补充:未定义不能在全局环境下赋值,可以在本地环境下赋值!
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:javascript中未定义的本质分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。