手机版

javascript中未定义的本质分析

时间:2021-08-21 来源:互联网 编辑:宝哥软件园 浏览:

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或者邮箱删除。