JavaScript检查null与undefined以及==和===之间的差异

2023-10-30

  1. 如何检查变量是否为nullundefined并且nullundefined什么区别?

  2. =====什么区别(很难在Google上搜索“ ===“)?


#1楼

区别是微妙的。

JavaScript中, undefined变量是从未声明或从未分配值的变量。 假设您声明var a; 例如,那么a将是undefined ,因为它从未分配任何值。

但是如果您再分配a = null; 那么a现在将为null 。 在JavaScript中, null是一个对象(如果您不相信我,请在JavaScript控制台中尝试typeof null ),这意味着null是一个值(实际上,甚至undefined都是一个值)。

例:

var a;
typeof a;     # => "undefined"

a = null;
typeof null;  # => "object"

这在函数参数中可能很有用。 您可能需要一个默认值,但是认为null为可以接受的。 在这种情况下,您可以执行以下操作:

function doSomething(first, second, optional) {
    if (typeof optional === "undefined") {
        optional = "three";
    }
    // do something
}

如果省略optional参数doSomething(1, 2) then optional将是"three"字符串,但如果传递doSomething(1, 2, null)则optional将为null

对于等于==和严格等于===比较器,第一个比较器是弱类型,而严格等于也检查值的类型。 这意味着0 == "0"将返回true; 而0 === "0"将返回false,因为数字不是字符串。

您可以使用这些运算符在undefinednull之间进行检查。 例如:

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

最后一种情况很有趣,因为它允许您检查变量是未定义的还是null,而没有别的:

function test(val) {
    return val == null;
}
test(null);       # => true
test(undefined);  # => true

#2楼

未定义

这意味着该变量尚未初始化。

范例:

var x;
if(x){ //you can check like this
   //code.
}

等于(==)

它只检查值等于数据类型。

范例:

var x = true;
var y = new Boolean(true);
x == y ; //returns true

因为它只检查值。

严格等于(===)

检查值和数据类型应该相同。

范例:

var x = true;
var y = new Boolean(true);
x===y; //returns false.

因为它检查数据类型x是原始类型,y是布尔对象。


#3楼

规范是为这些问题提供完整答案的地方。 总结如下:

  1. 对于变量x ,您可以:

    • 通过使用===直接比较来检查它是否为null 。 示例: x === null
    • 通过以下两种基本方法之一检查其是否undefined :与undefinedtypeof直接比较。 由于各种原因 ,我更喜欢typeof x === "undefined"
    • 通过使用==并依靠稍微神秘的类型强制规则来检查它是否为nullundefined之一,这意味着x == null确实可以满足您的要求。

  2. =====之间的基本区别在于,如果操作数是不同类型,则===将始终返回false==将使用导致某些稍微不直观的行为的规则将一个或两个操作数转换为相同类型。 如果操作数具有相同的类型(例如,两者都是字符串,例如上面的typeof比较),则=====行为将完全相同。

更多阅读:


#4楼

如果(逻辑)检查是否为负号(!),并且您想同时捕获JS nullundefined JS(因为不同的浏览器将为您提供不同的结果),则应使用限制性较小的比较:例如:

var ItemID = Item.get_id();
if (ItemID != null)
{
 //do stuff
}

这将同时捕获nullundefined


#5楼

如何检查变量是否为null或未定义

只需检查变量是否具有如下有效值:

if(variable)

如果变量不包含,它将返回true:

  • 空值
  • 未定义
  • 0
  • “”(空字符串)
  • N

#6楼

如何检查变量是否为nullundefined ...

变量是否为null

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

...但是请注意,如果a undefined ,后者也将适用。

它是undefined

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

...但是再次,请注意,最后一个是模糊的; 如果anull ,则也将为true。

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

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

这由规范中的ToBoolean定义。

...以及nullundefined和有什么undefined

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

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

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

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

它们之间的唯一区别是==将执行强制转换以尝试使值匹配,而===则不会。 因此,例如"1" == 1为true,因为"1"强制为1 。 但是"1" === 1false ,因为类型不匹配。 ( "1" !== 1为真。) ===第一步(实际)是“操作数的类型是否相同?” 如果答案为“否”,则结果为false 。 如果类型相同,则将完全执行==操作。

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

规格中的更多内容:


#7楼

您可以使用下面的代码检查所有四(4)条条件以进行验证,例如not null,not blank,not undefined和not zero仅在javascript和jquery中使用此代码(!(!(variable)))。

function myFunction() {
var data;  //The Values can be like as null, blank, undefined, zero you can test

if(!(!(data)))
{
   //If data has valid value
    alert("data "+data);
} 
else 
{
    //If data has null, blank, undefined, zero etc.
    alert("data is "+data);
}

}


#8楼

广告1. null不是全局对象属性的标识符,例如undefined 可以是

 let x; // undefined let y=null; // null let z=3; // has value // 'w' // is undeclared if(!x) console.log('x is null or undefined'); if(!y) console.log('y is null or undefined'); if(!z) console.log('z is null or undefined'); try { if(w) 0 } catch(e) { console.log('w is undeclared') } // typeof not throw exception for undelared variabels if(typeof w === 'undefined') console.log('w is undefined'); 

广告2。 ===检查值和类型。 ==不需要相同的类型,并且在比较之前进行隐式转换(使用.valueOf().toString() )。 这是全部( src ):

如果

在此处输入图片说明

== (其否定!=

在此处输入图片说明

=== (其否定!==

在此处输入图片说明

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript检查null与undefined以及==和===之间的差异 的相关文章

随机推荐

  • 优雅的关闭socket

    http blog sina com cn s blog 4dbcd2730100v5cu html 转载于以上网址 我们在利用IOCP 完成端口 进行程序设计的时候 经常要关闭一些不满足条件的套接字 假如我们直接采用closesocket
  • Vuforia——环境配置

    开发环境 Unity 2021 1 14flc1 Vuforia Engine AR 9 8 8 开发前要注意先配好Git 否则Vuforia插件无法导入 配置Vuforia 2021版本没有内置Vuforia 我也尝试去Asset Sto
  • 原生JS实现评论功能

    利用js的追加 appendChild实现评论
  • Android studio项目目录结构

    Android studio项目目录结构 一 gradle目录 二 idea目录 三 moudle App 目录 1 build目录 2 libs目录 3 src目录 1 AndroidTest 2 Java 3 res A 资源介绍 图片
  • Qt信号槽传递自定义结构体

    1 定义结构体并注册元对象 1 定义结构体 struct Student int m id int m age QString m name 2 注册元对象 Q DECLARE METATYPE Student class MainWind
  • git命令行提交文件

    命令行提交文件 git init 初始化创建 git文件 git add 添加所有需要提交的文件 git commit m 初始化 提交添加的文件到本地 git remote add origin git地址 与远程github建立链接 g
  • Java给定一个正整数n,求1+2+3+...+n之和并输出。

    package com haitong homeworktwo import java util Scanner public class One public static void main String args System out
  • python excel修改数据库_【超详细】用Python行云流水地操作Excel和数据库

    前言 本想就着这个机会学习下Java读取Excel的 奈何搜了一圈 发现还是Pandas最为简单明了 打算先就Python写一版 后面在学习时可能还会发一篇 用Java优雅地操作Excel和数据库 准备工作 软件包 关于软件安装和环境配置
  • 【C++】volatile关键字

    我们都知道当使用编译器时候 编译器会为我们的代码做出一些优化 关于validate关键字的功能和原理我们将用一个例子来给出解释 功能 当一个变量被volidate关键字修饰时 意味着当我们每次使用这个变量时都会从变量所在的内存中去获取 而不
  • 技术经验总结之——“&”符在XML中的转义

    1 符在XML的转义 lt action name docadd class com huawei netforce dcm ui DocAddAction gt lt result name success type dispatcher
  • yolor 测试笔记

    模型147M 测试图片发现 没有比yolov5好 下图测试 漏检了3个物体 论文 https arxiv org pdf 2105 04206 pdf 开源代码 https github com WongKinYiu yolor 前言 人们
  • 【C++】异常处理

    一 什么是异常处理 一句话 异常处理就是处理程序中的错误 二 为什么需要异常处理 以及异常处理的基本思想 C 之父Bjarne Stroustrup在 The C Programming Language 中讲到 一个库的作者可以检测出发生
  • java getparentfile_java中File 类的getParentFile()方法

    getParentFile 函数是可以获得上级目录了 我们下面来为各位介绍一篇关于java中File 类的getParentFile 方法使用详细 希望对大家有帮助 getParentFile 的作用是获得父目录 问题就是 mkdirs 这
  • ESXi直通Intel网卡接口出现reset故障解决

    最近买了个intel 82576的双口网卡 想直通给虚拟机做软路由使用 设置好直通 虚拟机添加PCI设备后 开机后接口一直报reset错误 无法使用 ESXI的直通设置如下 启动后报错如下 21 053132 igb 0000 0b 00
  • 基于循环神经网络股票预测系统

    循环神经网络 Simple RNN RNN神经网络模型是一种常用的深度神经网络模型 已成功应用于语言识别 文本分类等多个研究领域 相比其他网络模型 RNN最大的优势在于引入了时序与定向循环的概念 能够很好地解决输入数据前后之间相互关联的问题
  • 调用mysql数据_调用数据库的五种方式

    ThinkPHP 内置了抽象数据库访问层 把不同的数据库操作封装起来 我们只需要使用 公共的 Db 类进行操作 无须针对不同的数据库写不同的代码和底层实现 Db 类会自动调用 相应的数据库驱动来处理 一 全局配置定义 在common con
  • 明明导入Jar包却抛出ClassNotFoundException

    项目中添加过Jar包 显示ClassNotFoundException 因为在Tomcat中找不到mysql jar包 手动添加Jar包到tomcat bin下 出现错误的原因是 delete调用了executeQuery 方法
  • 私有代码存放仓库 BitBucket介绍及入门操作

    本文主要来自于萧 瑟BLOG 和牛仔的移动开发博客 并综合了多篇网上文章 代码版本控制系统在局域网内Subvision用的比较多 但其局限性太多 在代码审查 异地合作等功能方面比较弱 目前比较出名的分布式版本控制系统有Bitbucket和G
  • 求多边形面积公式(已知顶点坐标)

    下面介绍一种求多边形面积的方法 首先已知各定点的坐标分别为 x1 y1 x2 y2 x3 y3 Xn Yn 则该多边形的面积公式为 s 1 2 x1 y2 x2 y1 x2 y3 x3 y2 Xk Yk 1 Xk 1 Yk Xn y1 x1
  • JavaScript检查null与undefined以及==和===之间的差异

    如何检查变量是否为null或undefined并且null和undefined什么区别 和 什么区别 很难在Google上搜索 1楼 区别是微妙的 在JavaScript中 undefined变量是从未声明或从未分配值的变量 假设您声明va