本文将为您提供关于JavaScript中的null和undefined的详细介绍,我们还将为您解释javascriptnullundefined的相关知识,同时,我们还将为您提供关于ECMAScrip
本文将为您提供关于JavaScript中的null和undefined的详细介绍,我们还将为您解释javascript null undefined的相关知识,同时,我们还将为您提供关于ECMAScript中原始类型Null和Undefined小结、JavaScript JavaScript中null和undefined区别分析、JavaScript null和undefined区别分析_javascript技巧、javascript – null和undefined不一致的比较的实用信息。
本文目录一览:- JavaScript中的null和undefined(javascript null undefined)
- ECMAScript中原始类型Null和Undefined小结
- JavaScript JavaScript中null和undefined区别分析
- JavaScript null和undefined区别分析_javascript技巧
- javascript – null和undefined不一致的比较
JavaScript中的null和undefined(javascript null undefined)
1.概述
null和undefined属于js中两种不同的基本数据类型,都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。并且在if语句的判断条件中,它们都会自动转为false,相等运算符(==)甚至直接报告两者相等
var a = null;
var b = undefined;
if (!a) {
console.log(''a is false'');
}//a is false
if (!b) {
console.log(''b is false'');
}//b is false
if (null == undefined) {
console.log(''null == undefined is true'')
}//null == undefined is true
null
是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。
Number(null); // 0
null + 9; // 9
Number(undefined); // NaN
undefined + 9; // NaN
2.用法和含义
对于null和undefined,大致可以像下面这样理解。null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误。undefined表示“未定义”,下面是返回undefined的典型场景。
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined
原文出处:https://www.cnblogs.com/gongming/p/11609339.html
ECMAScript中原始类型Null和Undefined小结
文章最新版地址:http://leeyee.github.io/blog/2013/05/07/javascript-null-undefined
var param; | var param = undefined; | var param = null; | 未定义 | |
param == ''undefined'' | false | false | false | 报错。param未定义 |
param === ''undefined'' | false | false | false | 报错。param未定义 |
param == undefined | true | true | true | 报错。param未定义 |
param === undefined | true | true | false | 报错。param未定义 |
typeof param | undefined | undefined | object | undefined |
typeof param == ''undefined'' | true | true | false | true |
typeof param === ''undefined'' | true | true | false | true |
typeof param == undefined | false | false | false | false |
typeof param === undefined | false | false | false | false |
if(param) | false | false | false | 报错。param未定义 |
if(typeof param) | true | true | true | true |
结论:
- null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
- 声明但不赋值,默认为undefined;即 var param ; 等价于 var param = undefined;
- undefined不同于未定义,但typeof并不区分undefined和未定义;因此typeof(undefined)与typeof(未定义变量)的输出值都是undefined;
- 当函数无明确返回值时,默认返回的为undefined;如:( function foo(){ })
- typeof(null)返回的是对象,但null == undefined返回true;这是由于值undefined其实是从值null派生过来的,因此ECMAScript将其定义为一样的;
- null 虽然 == undefined,但undefined是声明了变量但未对其初始化时赋值时赋予该变量的值,null则表示尚未存在的对象;
- 只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null;
- 函数或方法返回值为对象时,如果该返回的对象找不到则该函数或方法通常返回的是null;
- typeof方法返回的是变量的引用类型的字符名称。因此if(typeof param)为永真。如果要判断引用类型,可以使用instanceof,但此时变量的声明应使用new关键字创建。
function test1() {
var param;// 定义但未赋值
console.log("1. var param; --> ", "定义但未赋值");
console.log(" 1.1. param == ''undefined'' <--> ", param == ''undefined''); // false
console.log(" 1.2. param == undefined <--> ", param == undefined);// true
console.log(" 1.1.1 param === ''undefined'' <--> ", param === ''undefined''); // false
console.log(" 1.2.1 param === undefined <--> ", param === undefined);// true
console.log(" 1.3. typeof param <--> ", typeof param); // undefined
console.log(" 1.4. typeof param == ''undefined'' <--> ",
typeof param == ''undefined''); //true
console.log(" 1.5. typeof param == undefined <--> ",
typeof param == undefined);//false
console.log(" 1.4.1 typeof param === ''undefined'' <--> ",
typeof param === ''undefined''); //true
console.log(" 1.5.1 typeof param === undefined <--> ",
typeof param === undefined);//false
param ? console.log(" 1.6. if(param) return true") : console
.log(" 1.6. if(param) return false");
typeof param ? console.log(" 1.7. if(typeof param) return true")
: console.log(" 1.7. if(typeof param) return false");
}
function test2() {
console.log("2. param未定义");
console.log(" 2.1. param == ''undefined'' <--> ", "报错,param未定义");
console.log(" 2.2. param == undefined <--> ", "报错,param未定义");
console.log(" 2.3. typeof param <--> ", typeof param); // undefined
console.log(" 2.4. typeof param == ''undefined'' <--> ",
typeof param == "undefined");//true
console.log(" 2.5. typeof param == undefined <--> ",
typeof param == undefined);//false
console.log(" 2.4.1 typeof param === ''undefined'' <--> ",
typeof param === ''undefined'');//true
console.log(" 2.5.1 typeof param === undefined <--> ",
typeof param === undefined);//false
console.log(" 2.6. if(param) 由于param未定义,因此报错");
typeof param ? console.log(" 2.7. if(typeof param) return true")
: console.log(" 2.8. if(typeof param) return false");
}
function test3() {
var param = null;
console.log("3. var param = null; -->", "定义默认为null");
console.log(" 3.1. param == ''undefined'' <--> ", param == ''undefined''); // false
console.log(" 3.2. param == undefined <--> ", param == undefined);// true
console.log(" 3.1.1 param === ''undefined'' <--> ", param === ''undefined''); // false
console.log(" 3.2.1 param === undefined <--> ", param === undefined);// true
console.log(" 3.3. typeof param <--> ", typeof param); // object
console.log(" 3.4. typeof param == ''undefined'' <--> ",
typeof param == ''undefined''); //false
console.log(" 3.5. typeof param == undefined <--> ",
typeof param == undefined);//false
console.log(" 3.4.1 typeof param === ''undefined'' <--> ",
typeof param === ''undefined''); //false
console.log(" 3.5.1 typeof param === undefined <--> ",
typeof param === undefined);//false
param ? console.log(" 3.6. if(param) return true") : console
.log(" 3.6. if(param) return false");
typeof param ? console.log(" 3.7. if(typeof param) return true")
: console.log(" 3.7. if(typeof param) return false");
}
function test4() {
var param = undefined;
console.log("4. var param = undefined; -->", "定义默认为undefined");
console.log(" 4.1. param == ''undefined'' <--> ", param == ''undefined''); // false
console.log(" 4.2. param == undefined <--> ", param == undefined);// true
console.log(" 4.3. typeof param <--> ", typeof param); // undefined
console.log(" 4.4. typeof param == ''undefined'' <--> ",
typeof param == ''undefined''); //true
console.log(" 4.5. typeof param == undefined <--> ",
typeof param == undefined);//false
param ? console.log(" 4.6. if(param) return true") : console
.log(" 4.6. if(param) return false");
typeof param ? console.log(" 4.7. if(typeof param) return true")
: console.log(" 4.7. if(typeof param) return false");
}
test1();
test2();
test3();
test4();
测试结果:
1. var param; --> 定义但未赋值
1.1. param == ''undefined'' <--> false
1.2. param == undefined <--> true
1.1.1 param === ''undefined'' <--> false
1.2.1 param === undefined <--> true
1.3. typeof param <--> undefined
1.4. typeof param == ''undefined'' <--> true
1.5. typeof param == undefined <--> false
1.4.1 typeof param === ''undefined'' <--> true
1.5.1 typeof param === undefined <--> false
1.6. if(param) return false
1.7. if(typeof param) return true
2. param未定义
2.1. param == ''undefined'' <--> 报错,param未定义
2.2. param == undefined <--> 报错,param未定义
2.3. typeof param <--> undefined
2.4. typeof param == ''undefined'' <--> true
2.5. typeof param == undefined <--> false
2.4.1 typeof param === ''undefined'' <--> true
2.5.1 typeof param === undefined <--> false
2.6. if(param) 由于param未定义,因此报错
2.7. if(typeof param) return true
3. var param = null; -->定义默认为null
3.1. param == ''undefined'' <--> false
3.2. param == undefined <--> true
3.1.1 param === ''undefined'' <--> false
3.2.1 param === undefined <--> false
3.3. typeof param <--> object
3.4. typeof param == ''undefined'' <--> false
3.5. typeof param == undefined <--> false
3.4.1 typeof param === ''undefined'' <--> false
3.5.1 typeof param === undefined <--> false
3.6. if(param) return false
3.7. if(typeof param) return true
4. var param = undefined; -->定义默认为undefined
4.1. param == ''undefined'' <--> false
4.2. param == undefined <--> true
4.3. typeof param <--> undefined
4.4. typeof param == ''undefined'' <--> true
4.5. typeof param == undefined <--> false
4.6. if(param) return false
4.7. if(typeof param) return true
JavaScript JavaScript中null和undefined区别分析
一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理。于是,细想之后,写下本文,请各位大侠拍砖。
总所周知:null == undefined
但是:null !== undefined
那么这两者到底有啥区别呢?
请听俺娓娓道来...
null
这是一个对象,但是为空。因为是对象,所以 typeof null 返回 'object' 。
null 是 JavaScript 保留关键字。
null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
表达式:123 + null 结果值:123
表达式:123 * null 结果值:0
undefined
undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。
虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:
alert('undefined' in window);//输出:true
var anObj = {};
alert('undefined' in anObj); //输出:false
从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。
注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。
undefined参与任何数值计算时,其结果一定是NaN。
随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!
提高undefined性能
当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。
同样,当我们定义一个变量但未赋予其初始值,例如:
var aValue;
这时,JavaScript在所谓的预编译时会将其初始值设置为对window.undefined属性的引用,
于是,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫‘undefined'的属性,然后再比较两个操作数的引用指针是否相同。
由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时 间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可以自行定义一个局部的undefined变 量,来加快对undefined的比较速度。例如:
function anyFunc() {
var undefined;
//自定义局部undefined变量
if(x == undefined)
//作用域上的引用比较
while(y != undefined)
//作用域上的引用比较
};