undefined是什么意思(null 和 undefined对比)
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。
一般来说,null和undefined表示空,主要的区别是undefined表示一个变量的值没有被初始化,null表示这个变量故意没有对象指向。
undefined变量本质上没有定义隐藏空值null此值虽然定义,但它不指向内存中的任何对象声明空值
简单区分
MDN 中给出的定义
值null是一个文字,不像undefined,它不是全局对象的属性。Null是一个缺失的标识符,表示变量不指向任何对象。最好将null视为尚未创建的对象。在API中,null通常用于返回类型应该是对象,但没有相关值的地方。
undefined是全局对象的属性。也就是说,它是全局作用域的变量。undefined的原始值是原始数据类型undefined。
这是一张来自stackoverflow的经典图片,我找不到确切的来源。
null
undefined
在更深入的理解null和undefined的区别时,我们首先需要知道在JS中null和undefined有哪些不同的形式,才能更好的理解null和undefined的区别。
Object.getPrototypeOf(Object.prototype) //null
一张神奇的图片
let a=undefined + 1 //NaNlet b=null + 1 //1Number(undefined) //NaNNumber(null) //0
JSON.stringify() //" JSON.stringify() //" JSON.stringify() //"
表现形式
" function test(n) test() //falsetest(undefined) //falsetest('test') //turelet undefined='test' //Uncaught SyntaxError: Identifier 'undefined' has already declarations
typeof
Object.prototype.toString.call
typeof null output 'object'实际上是一个低级错误,但到目前为止无法修复。
原因是,在JavaScript的原始版本中,值存储为32位。前三位表示数据类型的标记,其余位是值。
对于所有对象,它的前三位是000类型标志位。在JavaScript的早期版本中,null被认为是C语言中空指针的特殊值,但JavaScript在C语言中没有指针,因此null意味着什么都没有或为空,用全零表示(32)。
因此,当JavaScript读取null时,它的前三位将其视为对象类型,这就是typeof null返回'object'的原因。
toString()是Object的一个原型方法。当被调用时,它默认返回当前对象的[[Class]]。这是格式[object Xxx]的内部属性,其中Xxx是对象的类型。
这是因为toString方法在每个类中都被重写了。因此,需要调用Object中的toString方法,必须以toString的方式调用。叫()。
对于Object对象,直接调用toString()返回'[Object Object]'。对于其他对象,需要调用/apply来返回正确的类型信息。
== 与 ===
很多文章说:undefined布尔值为假,null布尔值为假,所以比较时转换为假,所以undefined==null。事实上,这不是真的。
ECMA在第11.9.3节明确告诉我们:
If x is null and y is undefined, return true.
If x is undefined and y is null, return true.
这是底部的JavaScript内容,至于更深入的内容,如果您对JavaScript源代码感兴趣的话。
这涉及到JavaScript中的隐式类型转换,在执行加法操作之前,隐式类型转换试图将表达式中的变量转换为类型number。例如,'1' + 1给出的结果是11。
当null被转换为number时,它将被转换为0undefined,当number被转换为NaN时。至于为什么要这么做,我怀疑这是JavaScript早期糟糕的设计。
0
Object.getPrototypeOf(Object.prototype)
其实这不是一个很好的解释方式,JSON会将未定义的键对应删除,这是JSON本身的转换原理。
在未定义的情况下,数据之间没有区别,因为它们在性能形式上没有区别:
let obj1=let obj2=console.log(obj1.a) //undefinedconsole.log(obj2.a) //未定义但是注意,当你调用一个接口时,需要在json格式的数据中对un违抗进行特殊处理。
+ 运算 与 Number()
JavaScript对于undefined的限制为全局创建一个只读的undefined,但没有完全禁止定义局部的undefined变量。
据说这个操作在JavaScript的高级版本中是禁止的,但是我没有准确的依据。
永远不要覆盖未定义的变量,即使您的JSON转换将未定义转换为“。不要进行这种操作,这是极其危险的行为。
JSON
:这是一个公平争议的内容。我更喜欢使用null,因为这是显示已定义空值的方式。我不能告诉你确切的原因。
但是我有一个关于使用undefined的建议:如果你需要使用undefined来定义空值,不要做以下任何一件事:
让一个;设a=undefined;然后以以下方式显式声明undefined:
设a=void 0;
let undefiend = 'test'
最终清除了undefined和null之间的基本区别。
本文主要介绍了关于undefined是什么意思(null 和 undefined对比)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://seotea.com/article/1445362.html