GVKun编程网logo

JavaScript检查null与undefined以及==和===之间的差异(javascript null 判断)

24

如果您对JavaScript检查null与undefined以及==和===之间的差异感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于JavaScript检查null与und

如果您对JavaScript检查null与undefined以及==和===之间的差异感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于JavaScript检查null与undefined以及==和===之间的差异的详细内容,我们还将为您解答javascript null 判断的相关问题,并且为您提供关于JavaScript JavaScript中null和undefined区别分析、JavaScript null和undefined区别分析_javascript技巧、JavaScript · 随笔 Null vs. Undefined、Javascript 中 null、NaN和undefined的区别总结_javascript技巧的有价值信息。

本文目录一览:

JavaScript检查null与undefined以及==和===之间的差异(javascript null 判断)

JavaScript检查null与undefined以及==和===之间的差异(javascript null 判断)

  1. 如何检查一个变量,如果是nullundefined,是什么之间的差异nullundefined

  2. ==和之间有什么区别===(很难在Google上搜索“ ===”)?

答案1

小编典典

如何检查一个变量,如果它null还是undefined

是变量null

if (a === null)// orif (a == null) // but see note below

…但请注意,如果ais ,则后者也适用undefined

它是undefined

if (typeof a === "undefined")// orif (a === undefined)// orif (a == undefined) // but see note below

…但是再次,请注意,最后一个是模糊的;如果a是的话,也是正确的null

现在,尽管有上述情况, 检查这些内容的 通常 方法是使用它们是 的事实:

if (!a) {    // `a` is falsey, which includes `undefined` and `null`    // (and `""`, and `0`, and `NaN`, and [of course] `false`)}

这由规范中的ToBoolean定义。

......是什么之间的差异nullundefined

它们都是通常用来表示缺少某些东西的值。undefined是更通用的变量,用作变量的默认值,直到为其分配了其他值,作为调用函数时未提供的函数参数的值,以及当您询问对象时获得的值没有它的财产。但也可以在所有这些情况下明确使用它。(不具有属性的对象和具有带值的属性undefined之间存在区别;调用undefined具有参数值的函数并将该参数完全关闭是有区别的。)

nullundefined:更具体:这是一个空白对象引用。当然,JavaScript是松散类型的,但并非与JavaScript交互的所有事物都是松散类型的。如果浏览器中的DOM之类的API需要空白的对象引用,则使用null,而不是undefined。同样,DOM的getElementById操作返回一个对象引用-
一个有效的对象引用(如果找到了DOM元素)或null(如果没有)。

有趣的是(或者不是),它们是自己的类型。也就是说,null是Null类型undefined中的唯一值,也是Undefined类型中的唯一值。

“ ==”和“ ===”有什么区别

它们之间的唯一区别是,==它将强制输入以尝试使值匹配,而===不会。举例"1" == 1来说,是正确的,因为"1"强制到1。但是"1"=== 1false ,因为类型不匹配。("1" !== 1是。)的第一步(实际)===是“操作数的类型是否相同?”
如果答案为“否”,则结果为false。如果类型相同,那么它将完全==一样。

类型强制使用非常复杂的规则,并且可能会产生令人惊讶的结果(例如,"" == 0是正确的)。

JavaScript JavaScript中null和undefined区别分析

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) 
//作用域上的引用比较 
}; 

其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变 量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少 于window对象的属性,搜索变量的速度会极大提高。 
这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!

JavaScript null和undefined区别分析_javascript技巧

JavaScript null和undefined区别分析_javascript技巧

一时间不好回答,特别是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)
//作用域上的引用比较
};

其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变 量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少 于window对象的属性,搜索变量的速度会极大提高。
这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!

JavaScript · 随笔 Null vs. Undefined

JavaScript · 随笔 Null vs. Undefined

刚学了一些 Markdown 的基础语法,试着用一下。

相关文档:Markdown基本语法配合基本使用

相同点:


不同点:

let i = null;
console.log(i);
// null
let j;
console.log(j);
// undefined

可见:
null 代表变量有值,值为 , 且该值是通过 变量赋值 获得的;
undefined 代表声明了变量,但没有为其赋值。

综上:

undefined == null;
// true
undefined !== null;
// true

使用 typeof 验证一下:

typeof undefined;
// "undefined"
typeof null;
// "object"
typeof NaN;
// "number"

Emm...,undefinednull的类型不一致,确实验证了undefined !== null,不过...
null的类型是object?! ( 你不是js的基本数据类型吗? )
NaN的类型是number?! ( 你全称不是叫 “Not a Number” 吗? )

事实上就是如此,而且你还会发现:

!!NaN === false;
// true
NaN == false;
// false
NaN == 0;
// false

甚至:

NaN == NaN;
// false

NaN的特性就是如此:

!!是个很好用的“运算符”,它的用途是判断任意值在做if条件判断时的逻辑值(而非参与逻辑运算时的逻辑值,下文会提到。实际上!!运算符的运算结果就是前面提到的那6个falsy值),比如:

!! ""
// false
"" == false
// true

!! 0
// false
0 == false
// true

但是,千万不要觉得!!运算结果为false,== false就成立,比如:

!! undefined;
// false
undefined == false;
// false
!! undefined === false;
// true

!! null;
// false
null == false;
// false
!! null === false;
// true

!! NaN;
// false
NaN == false;
// false
!! NaN === false;
// true

另一点需要注意的是,它不做为参与逻辑运算时的逻辑值(而是作为falsy或truly值参与条件运算),比如:

!! undefined;
// false

/* 结果是undefined,而不是false */
undefined && ''a'';
// undefined

false && ''a'';
// false

但愿你还没看蒙。。至于为什么typeof(null) === ''object''
Emm。。跑题了,我们接着说 Null vs. Undefined


常见应用场景:

  1. ===(严格等于) 和 ==(等于) 分别在何时使用:

    我们都知道在做逻辑判断时,== 会强制转换用于比较的两个值的类型;而在实际开发中,以下情况用 == ,其他时候都用 === 即可

    if (obj.a == null) {
      // 这里相当于 obj.a === null || obj.a === undefined;
      // 这也是jquery源码中推荐的写法
    }
  2. ES6函数默认参数的实现:
    结合上文,null 是有值的,且值为 ,可通过赋值赋给变量

    let logHi = (param = ''hello'' ) => {
      console.log(param);
    };
    
    /* 默认值生效 */
    logHi();
    // "hello"
    
    /* 赋值调用 */
    logHi(''world'');
    // "world"
    
    /* undefined时,默认值生效 */
    logHi(undefined);
    // "hello"
    
    /* null作为值,赋值调用 */
    logHi(null);
    // null
    
    /* NaN作为值,赋值调用 */
    logHi(NaN);
    // NaN

    倘若函数这样写:

    let consoleHi = (param) => {
      param = param || ''hello'';
      console.log(param);
    };
    
    /* 默认值生效 */
    consoleHi();
    // "hello"
    
    /* 赋值调用 */
    consoleHi(''world'');
    // "world"
    
    /* undefined时,默认值生效 */
    consoleHi(undefined);
    // "hello"
    
    /* null作为值为falsy */
    consoleHi(null);
    // "hello"
    
    /* NaN作为值为falsy */
    consoleHi(NaN);
    // "hello"
参考文献:JavaScript — Null vs. Undefined

题外话:不免想起一篇文章,虽然联系不大
趣文:编程其实是文科

Javascript 中 null、NaN和undefined的区别总结_javascript技巧

Javascript 中 null、NaN和undefined的区别总结_javascript技巧

1.类型分析
js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
代码

复制代码 代码如下:

var a1;
var a2 = true;
var a3 = 1;
var a4 = "Hello";
var a5 = new Object();
var a6 = null;
var a7 = NaN;
var a8 = undefined;
alert(typeof a); //显示"undefined"
alert(typeof a1); //显示"undefined"
alert(typeof a2); //显示"boolean"
alert(typeof a3); //显示"number"
alert(typeof a4); //显示"string"
alert(typeof a5); //显示"object"
alert(typeof a6); //显示"object"
alert(typeof a7); //显示"number"
alert(typeof a8); //显示"undefined"

从上面的代码中可以看出未定义的值和定义未赋值的为undefined,null是一种特殊的object,NaN是一种特殊的number。
2.比较运算
复制代码 代码如下:

var a1; //a1的值为undefined
var a2 = null;
var a3 = NaN;
alert(a1 == a2); //显示"true"
alert(a1 != a2); //显示"false"
alert(a1 == a3); //显示"false"
alert(a1 != a3); //显示"true"
alert(a2 == a3); //显示"false"
alert(a2 != a3); //显示"true"
alert(a3 == a3); //显示"false"
alert(a3 != a3); //显示"true"

从上面的代码可以得出结论:(1)undefined与null是相等;(2)NaN与任何值都不相等,与自己也不相等。

JavaScript undefined 属性

定义和用法
undefined 属性用于存放 JavaScript 的 undefined 值。

语法
undefined

说明
无法使用 for/in 循环来枚举 undefined 属性,也不能用 delete 运算符来删除它。
undefined 不是常量,可以把它设置为其他值。
当尝试读取不存在的对象属性时也会返回 undefined。
提示和注释



实例
在本例中,我们将检测两个变量中未定义的一个:
复制代码 代码如下:

输出:

[补充]Null 数据类型
在 Jscript 中数据类型 null 只有一个值:null。关键字 null 不能用作函数或变量的名称。
包含 null 的变量包含“无值”或“无对象”。换句话说,该变量没有保存有效的数、字符串、boolean、数组或对象。可以通过给一个变量赋 null 值来清除变量的内容。

请注意,在 Jscript 中,null 与 0 不相等(与在 C 和 C++ 中不同)。同时应该指出的是,Jscript中 typeof 运算符将报告 null 值为 Object 类型,而非类型 null。这点潜在的混淆是为了向下兼容。
Undefined 数据类型
如下情况使返回 undefined 值:
对象属性不存在,
声明了变量但从未赋值。

注意不能通过与 undefined 做比较来测试一个变量是否存在,虽然可以检查它的类型是否为“undefined”。在以下的代码范例中,假设程序员想测试是否已经声明变量 x :
复制代码 代码如下:

// 这种方法不起作用
if (x == undefined)
// 作某些操作
// 这个方法同样不起作用- 必须检查
// 字符串 "undefined"
if (typeof(x) == undefined)
// 作某些操作
// 这个方法有效
if (typeof(x) == "undefined")
// 作某些操作

考虑将 undefined 值与null做比较。
someObject.prop == null;
如下情况时,比较的结果为 true,
如果属性 someObject.prop 包含 null 值,
如果属性 someObject.prop 不存在。
要检查一个对象属性是否存在,可以使用新的 in 运算符:
if ("prop" in someObject)
// someObject 有属性 ''prop''
在JavaScript中,null与undefined一度使人迷惑。下面的分析,有利于你更清晰的认知它(或者让你更迷惑):
- null是关键字;undefined是Global对象的一个属性
- null是对象(空对象, 没有任何属性和方法);undefined是undefined类型的值。试试下面的代码:
document.writeln(typeof null); //return object
document.writeln(typeof undefined); //return undefined
- 对象模型中,所有的对象都是Object或其子类的实例,但null对象例外:
document.writeln(null instanceof Object); //return false
- null“等值(==)”于undefined,但不“全等值(===)”于undefined:
document.writeln(null == undefined); //return true
document.writeln(null === undefined); //return false
- 运算时null与undefined都可以被类型转换为false,但不等值于false:
document.writeln(!null, !undefined); //return true,true
document.writeln(null==false); //return false
document.writeln(undefined==false); //return false

我们今天的关于JavaScript检查null与undefined以及==和===之间的差异javascript null 判断的分享已经告一段落,感谢您的关注,如果您想了解更多关于JavaScript JavaScript中null和undefined区别分析、JavaScript null和undefined区别分析_javascript技巧、JavaScript · 随笔 Null vs. Undefined、Javascript 中 null、NaN和undefined的区别总结_javascript技巧的相关信息,请在本站查询。

本文标签: