我想知道JavaScript中null和undefined之间的区别。
当前回答
null和undefined都用于表示缺少某个值。
var a = null;
a被初始化和定义。
typeof(a)
//object
null是JavaScript中的对象
Object.prototype.toString.call(a) // [object Object]
var b;
b未定义且未初始化
未定义的对象财产也是未定义的。例如,“x”未在对象c上定义,如果您尝试访问c.x,它将返回undefined。
通常,我们为未定义的变量赋值null。
其他回答
undefined表示变量已声明但尚未赋值:
var测试var;console.log(testVar)//显示未定义console.log(testVar类型)//显示未定义
null是赋值。它可以作为无值表示分配给变量:
var testVar=空;console.log(testVar)//显示nullconsole.log(testVar类型)//显示对象
从前面的示例中可以清楚地看到,undefined和null是两种不同的类型:undefineed是类型本身(undefine),而null是对象。
证明:
console.log(null==未定义)//false(类型不同)console.log(null==undefined)//true(但为“相同值”)console.log(null==null)//true(类型和值相同)
and
null = 'value' // Uncaught SyntaxError: invalid assignment left-hand side
undefined = 'value' // 'value'
const data = { banners: null }
const { banners = [] } = data;
console.log(data) // null
const data = { banners: undefined }
const { banners = [] } = data;
console.log(data) // []
理解差异的最佳方法是首先理清JavaScript的内部工作原理,并理解以下两者之间的含义差异:
let supervisor = "None"
// I have a supervisor named "None"
let supervisor = null
// I do NOT have a supervisor. It is a FACT that I do not.
let supervisor = undefined
// I may or may not have a supervisor. I either don't know
// if I do or not, or I am choosing not to tell you. It is
// irrelevant or none of your business.
这三种情况的含义不同,JavaScript用两个不同的值(null和undefined)来区分后两种情况。您可以自由地明确使用这些值来表达这些含义。
那么,由于这种哲学基础而产生的一些JavaScript特定问题是什么呢?
没有初始值设定项的已声明变量将获得未定义的值,因为您从未说过预期值是什么。出租监督员;断言(主管==未定义);从未设置过的对象的属性求值为undefined,因为没有人说过该属性。const dog={name:“Sparky”,年龄:2};断言(dog.bred==未定义);null和undefined彼此“相似”,因为Brendan Eich是这么说的。但它们显然彼此不相等。断言(null==未定义);断言(null!==未定义);谢天谢地,null和undefined有不同的类型。null属于null类型,undefined属于undefined类型。这在规范中,但你永远不会知道这一点,因为我不会在这里重复这种奇怪的类型。如果函数到达其主体的末尾而没有显式返回语句,则返回undefined,因为您不知道它返回了什么。
顺便说一句,JavaScript中还有其他形式的“虚无”(学习哲学很好……)
NaN公司使用从未声明的变量并接收ReferenceError在其时间死区中使用let或const定义的局部变量并接收ReferenceError稀疏数组中的空单元格。是的,虽然它们与undefined相比==,但它们甚至没有定义。$节点>常量a=[1,未定义,2]>常量b=[1,2]>一个[1,未定义,2]>b级[1,<1空项>,2]
null是一个特殊的关键字,表示缺少值。
将其视为一种价值,例如:
“foo”是字符串,true为布尔值,1234是数字,null未定义。
undefined属性表示尚未为变量分配包含null的值。喜欢
var foo;
定义的空变量为null,数据类型为undefined
它们都表示一个没有值的变量的值
以及null不表示没有值的字符串-空字符串-
Like
var a = '';
console.log(typeof a); // string
console.log(a == null); //false
console.log(a == undefined); // false
现在如果
var a;
console.log(a == null); //true
console.log(a == undefined); //true
BUT
var a;
console.log(a === null); //false
console.log(a === undefined); // true
所以每个人都有自己的使用方法
undefined使用它来比较变量数据类型
null使用它来清空变量的值
var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object
我想添加一个与空和未定义之间的细微差别有关的知识点。当您尝试从头开始学习Vanilla JavaScript(JS)时,这一点很好:
null是JS中的保留关键字,而undefined是运行时环境的全局对象。
在编写代码时,这种差异是不可识别的,因为null和undefined总是在JavaScript语句的右侧(RHS)使用。但当你在表达式的左手边(LHS)使用它们时,你可以很容易地观察到这种差异。因此JS解释器将以下代码解释为错误:
var null = 'foo'
它给出以下错误:
未捕获语法错误:意外的标记null
同时,以下代码运行成功,尽管我不建议在现实生活中这样做:
var undefined = 'bar'
这是因为undefined是全局对象(如果JavaScript在浏览器中运行,则为窗口对象)上的一个属性