javascript中的null与undefined

2023-11-04

1.null(当做对象的占位符)

null是一个特殊值,常与undefined搞混,应用场景:

  • 用来初始化一个变量,这个变量可能赋值为一个对象
  • 用来和一个已经初始化的变量比较,这个变量可以是一个对象也可以不是
  • 当函数的参数期望是对象时,用作参数传入
  • 当函数的返回值期望是对象时,用作返回值传出

不应当使用null:

  • 不要使用null来检测是否传入了某个参数
  • 不要用null来检测一个未初始化的变量
//好的用法,用来初始化一个变量,这个变量可能赋值为一个对象
var person=null;
//好的用法,当函数的返回值期望是对象时,用作返回值传出
function getPerson(){
    if(condition){
        return new Person("zzz")
    }else{
        return null;
    }
}
//好的用法,用来和一个已经初始化的变量比较,这个变量可以是一个对象也可以不是
var person=getPerson()
if(person!==null){
    dosomething();
}
//不好的用法,和未初始化变量比较
var person;
if(person!=null){
    dosomething()
}
//不好的用法,检测是否传入了参数
function doSomething(a,b,c,d){
    if(d!==null){
        dosomething()
    }
}

2.undefined

undefined是一个特殊值,我们经常和null搞混,null==undefined结果是true,然而他俩用处各不相同,那些未初始化的变量,都有一个初始值,即undefined,表示这个变量等待赋值。

//不好的写法
var person;
console.log(person====undefined)//true

不建议使用undefined!!!

不管是值为undefined的变量,还是未声明的变量,typeof的结果都是undefined

//foo未声明
var person;
console.log(typeof person) //undefined
console.log(typeof foo)  //undefined

在语句中使用foo,会报错,而person不会
通过禁止使用undefined,确保只有未声明的时候才会undefined,将变量初始值赋值为null,表明可能为对象,typeof nulll返回object,与undefined区分

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

javascript中的null与undefined 的相关文章

  • 《Thinking in java》笔记

    thinking in java 引发的思考 关于java面向对象的思考 抽象 并发 thinking in java中1 1抽象过程的描述 问题空间 gt 解空间的映射 所有问题最终都是列表 所有问题最终都是算法 面向对象 对象是现实世界
  • 向日葵win10控制Ubuntu失败怎么办

    服务器Ubuntu18 04 我的个人电脑win10 服务器端控制win10没问题 但是win10控制不了Ubuntu 这是因为向日葵在Ubuntu上没有开放xhost造成的 在Ubuntu的终端输入以下命令 sudo gedit etc

随机推荐

  • 曙光服务器重装系统centos7.9

    我的诉求是重装系统 清空所有 因此在划分磁盘的地方把以前的全部删了 朋友们谨慎参考 大致的思路就是 1 刻录一个带有新系统的U盘 系统可能和服务器硬件不兼容 因此建议搞俩系统 2 在服务器旁边 连接显示屏操作
  • python 实现自动上传文件到百度网盘(附程序源码及实现过程)

    把环境搭建完成之后就可以上传文件到自己的百度网盘中 环境搭建移步 环境准备 python3 6 firefox 最好是最新版 不然不会报错 Windows 7 框架搭建 selenium3 6 安装方法 pip install seleni
  • Windows下的socket编程

    前言 经过一周的时间 我又回来啦 这周我主要学习的是Windows下的socket网络编程 本篇博客的内容包括socket的简介 TCP IP协议的讲解 TCP socket编程实例 UDP socket编程实例以及相关类的封装 涉及到的知
  • 基类和派生类之间构造函数和析构函数的调用顺序

    笔者面试时 经常被问到基类和派生类之间构造函数和析构函数的调用顺序的问题 今天写个简单程序记录一下 include
  • python怎么换行输代码_python输代码怎么换行?

    python是一种计算机脚本语言 它语言简洁明了 实现也非常简单 但是有时对编写风格不是很熟悉的话 做起来也是不太方便 下面小编将带大家一起学习一下 在输入Python语句时如何换行 有朋友可能会想到 直接enter一下不就行了吗 但实际上
  • MMDeteceion V3版之系列一(环境安装、模型测试、训练以及模型后处理工具)

    1 MMDeteceion初识 MMDetection是一款优秀的基于PyTorch的深度学习目标检测工具箱 由香港中文大学 CUHK 多媒体实验室 mmlab 开发 基本上支持所有当前SOTA二阶段的目标检测算法 比如faster rcn
  • 如何使用multipart/form-data格式上传文件

    如何使用multipart form data格式上传文件 大家好 我是许飞 微软拼音的开发实习生 在网络编程中 经常用到从服务器上 下载 一些数据 有时却要向服务器 上传 数据 曾在一个原型中使用了 multipart form data
  • 【模型调参总结之解决模型过拟合方法】

    模型调参总结之解决模型过拟合方法 前言 在深度学习中对于过少的数据集 模型往往会产生过拟合现象 本文将对过拟合问题进行归纳和总结 并针对性的提出一点自己的见解 原因 由于数据集中图片数量较少 但模型训练次数扩大时 会导致模型对于训练集中图片
  • [1147]pandas中merge()函数的用法详解

    文章目录 merge 举例说明 merge import pandas as pd pd merge DateFrame1 DateFrame2 on how merge是pandas中用来合并数据的函数 不像concat是按照某行或某列来
  • 如何一键重装Win7系统 便捷重装Win7系统教程

    想要便捷又有效在线一键重装Win7系统 便捷重装Win7系统教程来了 Win7系统是很多用户喜欢使用的一款操作系统 具有速度快 稳定 兼容性好等特点 不管是办公还是玩游戏都是十分不错的选择 今天小编将为大家带来系统之家在线一键重装Win7系
  • Android 开发小贴士

    Android 开发小贴士 应用编译时报错 Unable to merge dex 可能原因 包引用重复 方法数超限或者几个库之间有重复代码块 特别是在整理module时容易犯 解决办法 app的build gradle 中 1 添加配置
  • Java + opencv 实现人脸识别,图片人脸识别、视频人脸识别、摄像头实时人脸识别

    搭建环境 opencv官网下载windows安装包 https opencv org releases 选择最新版4 1 1 下载完成后是一个opencv 4 1 1 vc14 vc15 exe 双击安装 重要 把安装路径D Sofewar
  • Spring Boot logback日志

    slf4j和log4j log4j2 logback 之间的关系 log4j出来时就得到了广泛的应用 是Java日志事实上的标准 并成为了Apache的项目 Apache要求把log4j并入到JDK SUN拒绝 并在jdk1 4版本后增加了
  • VMware复制后的虚拟机不能上网问题解决

    Vmware复制后的虚拟机不能上网问题解决 最近在vmware上安装了一个xp虚拟机 想同时运行两个这样的虚拟机 于是想到了复制 将原来的虚拟机文件夹复制下来 然后在vmware中打开该文件扩展名为 vmx的虚拟机即可 但是发现却无法上网
  • CentOS Linux release 7.9.2009 误删自带的python和yum解决方案

    目录 1 进去阿里镜像源仓库 2 下载相应的文件 3 执行下面操作 4 验证yum和python version 查看系统版本 cat etc redhat release 1 进去阿里镜像源仓库 阿里云开源镜像站资源目录 2 下载相应的文
  • 测试流程如何有效落地?

    前言 之前有小伙伴问了我一个问题 作为测试leader 你该如何有效落地测试流程 这个问题看起来很简单 只要落地流程做个宣讲然后有人执行就行了 但仔细一想却没那么简单 团队人员有多少 技术和经验如何 业务类型是什么 研发交付质量处于什么阶段
  • Unsupported major.minor version 52.0报错处理(jdk版本问题)

    在centOS上执行maven工程遇到报错 是运行环境和工程环境jdk版本不一致导致 但是明明安装的是1 8jdk啊 环境变量也配置了 这是为什么呢 原来 maven工程jdk版本为1 8 系统环境java和javac版本不一致 java
  • 使用docker配置nginx的高可用集群(主从模式)

    本文参考了这篇博客 https blog csdn net maxinfan article details 80661705 搭建nginx的高可用集群按理应该需要至少两台服务器才可以 但如果有docker 则可以只使用一台服务器搭建 本
  • 基于5G+MEC的电站行业专网部署方案研究

    摘 要 随着5G正式商用以及新基建对5G应用的大力推进 5G正快速融入工业 能源 医疗等各行各业 成为推动实体经济数字化 网络化 智能化转型升级的关键驱动 主要研究5G专网在发电站领域的部署方案 探讨如何将5G技术应用于电站生产 运维各环节
  • javascript中的null与undefined

    1 null 当做对象的占位符 null是一个特殊值 常与undefined搞混 应用场景 用来初始化一个变量 这个变量可能赋值为一个对象 用来和一个已经初始化的变量比较 这个变量可以是一个对象也可以不是 当函数的参数期望是对象时 用作参数