关于 JavaScript 中 null 的一切

原文作者:Dmitri Pavlutin

译者:Gopal

JavaScript 有两种类型:原始类型( strings, booleans, numbers, symbols)和对象

对象是一个复杂的数据结构。最简单的 JavaScript 对象是普通对象 —— 键和相关值的集合

let myObject = {
  name: 'Eric Cartman'
};

但是很多情况下不能创建一个对象。在这种情况下, JavaScript 提供了一个特殊的值 null —— 表示缺少对象

let myObject = null;

在这篇文章中,你将学习关于 JavaScript 中的 null 的一切: 它的含义,如何检测它, nullundefined 之间的区别,以及为什么大量使用 null 会造成代码维护困难等

1.null 的概念

JavaScript 规范中这么描述 null

null 是一种原始类型,表示有意不包含任何对象值

如果您看到 null(分配给变量或由函数返回),那么在那个位置原本应该是一个对象,但由于某种原因,一个对象没有创建

比如,函数 greetObject() 创建对象,但也可以在无法创建对象时返回 null:

function greetObject(who) {
  if (!who) {
    return null;
  }
  return { message: Hello, ${who}! };
}

greetObject('Eric'); // => { message: 'Hello, Eric!' }
greetObject();       // => null

当上面的函数中传入一个字符串参数时,如预期的,函数返回一个对象 { message: 'Hello, Eric!' }

但是,函数中不传任何参数时,该函数返回 null。返回 null 是合理的,因为 who 参数没有值,导致 greeting 对象无法创建

考虑关于 null 的一个比较贴切的比喻,你可以把变量想象成一个盒子。就像变量可以容纳对象一样,盒子也可以容纳像茶壶等的物品

但一旦你收到一个盒子,打开它,什么也没有!有人弄错了,给了你一个空盒子。该盒子不包含任何内容,或者换句话说,它包含一个 null

2. 如何去检测 null

const missingObject = null;
const existingObject = { message: 'Hello!' };

missingObject  === null; // => true
existingObject === null; // => false

missingObject === null 的结果为 true,因为 missingObject 变量包含一个 null 值。如果变量包含非空值,比如对象,则表达式 existingObject === null 的结果为 false

nullfalse、0、”、 undefinedNaN 都是假值。如果在条件语句中遇到它们,那么 JavaScript 将把它们强制为 false

Boolean(null); // => false

if (null) {
  console.log('null is truthy');
} else {
  console.log('null is falsy'); // logs 'null is falsy'
}

typeof value 类型操作符可以确定值的类型。例如,类型为 15 的是 numbertypeof { prop: 'Value' } 等于 object

有趣的是, null 值类型的结果是什么

typeof null; // => 'object'

一个缺失的对象类型怎么被判断为 object? 原来 typoef null 作为 object 是早期 JavaScript 实现中的一个错误

不要使用 typeof 操作符检测 null 值。如前所述,使用严格的相等运算符 myVar === null

如果你想使用 typeof 去检查一个变量是否是一个对象,你必须排除掉 null 的情况

function isObject(object) {
  return typeof object === 'object' && object !== null;
}

isObject({ prop: 'Value' }); // => true
isObject(15);                // => false
isObject(null);              // => false

3. null 的陷阱

null 通常会在你希望使用对象的情况下意外出现。然后,如果尝试从 null 中提取属性, JavaScript 会抛出一个错误

让我们再次使用 greetObject() 函数并尝试从返回的对象中访问 message 属性

let who = '';

greetObject(who).message;
// throws "TypeError: greetObject() is null"

因为 who 变量是一个空字符串,所以函数返回 null。当从 null 访问 message 属性时,将抛出类型错误错误

let who = '';

greetObject(who)?.message ?? 'Hello, Stranger!';
// => 'Hello, Stranger!'

或者使用下一节中描述的两种选择。

4. null 的替代方案

当你不能构造一个对象时,很容易返回 null。但这种做法也有缺点

一旦 null 出现在执行堆栈中,你总是必须检查它

我们尽量避免返回 null

  • 返回默认对象而不是 null
  • 抛出错误而不是返回 null

让我们回忆一下 greetObject() 函数返回 greeting 对象

当缺少参数时,可以返回一个默认对象,而不是返回 null

function greetObject(who) {
  if (!who) {
    who = 'Stranger';
  }
  return { message: Hello, ${who}! };
}

greetObject('Eric'); // => { message: 'Hello, Eric!' }
greetObject();       // => { message: 'Hello, Stranger!' }

或者抛出一个错误

function greetObject(who) {
  if (!who) {
    throw new Error('"who" argument is missing');
  }
  return { message: Hello, ${who}! };
}

greetObject('Eric'); // => { message: 'Hello, Eric!' }
greetObject();       // => throws an error

这些实践可以让你完全避免处理 null

5. null vs undefined

undefined 就是未初始化的变量或对象属性的值

例如,如果在声明变量时没有赋初值,那么访问该变量的结果为 undefined

let myVariable;

myVariable; // => undefined

nullundefined 之间的主要区别是, null 表示丢失了的对象,而 undefined 表示未初始化的状态

严格相等运算符 === 区分 nullundefined

null === undefined; // => false

而松散相等运算符 == 则认为 nullundefined 相等

null == undefined; // => true

我使用松散相等运算符检查变量是否为 nullundefined

function isEmpty(value) {
  return value == null;
}

isEmpty(42);                // => false
isEmpty({ prop: 'Value' }); // => false
isEmpty(null);              // => true
isEmpty(undefined);         // => true

6. 总结

nullJavaScript 中的一个特殊值,表示丢失的对象

严格相等运算符判断变量是否为空: variable === null

typoef 操作符用于确定变量的类型(number, string, boolean)。但是, typeofnull 情况下会引起误解: typeof null 结果为 object

nullundefined 在某种程度上是等价的,但 null 表示一个丢失的对象,而 undefined 表示未初始化状态

尽可能避免返回 null 或将变量设置为 null。因为这种做法会导致 null 值的扩展和需要对 null 的验证。相反,尝试使用具有默认属性的对象,或者甚至抛出错误会是更好的实践

你会使用什么方法来检查 null?

Original: https://www.cnblogs.com/gopal/p/16675860.html
Author: 前端Gopal
Title: 关于 JavaScript 中 null 的一切



相关阅读

Title: 远程连接postgresql数据库-redhat版本(发现ing)

还是如此啊,介于网上的方法没法让我成功,所以我又来了。同样是自己发现的,因为想了想ftp的连接操作。
虽然标题说是redhat版本,其他版本应该差不多吧!

OK,咱开始
远程定义——windows 连接linux系统上的postgresql
我的redhat版本是7.9,postgresql数据版本是13

前面步骤基本上跟网上的差不多

首先找到postgresql的data目录

ps -ef|grep postgre

输入上面这个命令后,图下所标记的地方就是咱需要”cd”的地方

关于 JavaScript 中 null 的一切
cd (自己postgresql的data目录)

编辑pg_hba.conf

vim pg_hba.conf

在最后一行加上

host        all                all                192.168.40.0/24                md5

ip地址可以自定义
“/”后面的数字32是代表固定ip地址,24是固定前面三段地址,0好像跟24差不多,就是固定我上面的”192.168.6″,md5就不用说了吧
然后保存

编辑postgresql.conf

vim postgresql.conf

进去后找到” listen_address=’localhost’ “,
改成” listen_address=’*’ “我的默认是被注释掉了,如果其前面有”#”,需要去掉。
如果发现port=5432也是前面有”#”,同样也要去掉哈。一般就在”listen_address”下面几行。

关于 JavaScript 中 null 的一切
然后重启postgresql服务
systemctl restart postgresql-13(根据所下版本输入服务名)

将postgresql添加到防火墙

这是在线教程没有的。我没有找到它。这是一个重要的决定因素!!!

[En]

This is what the online tutorial does not have. I did not find it. This is an important determinant!!!

firewall-cmd --add-service postgresql --permanent

然后重启防火墙

firewall-cmd --reload

可以确认下是否加入进去了

firewall-cmd --list-all

关于 JavaScript 中 null 的一切
在该行出现了”postgresql”就证明成功了!
之后就可以在第三方软件上连接上了!
关于 JavaScript 中 null 的一切
ps:时间—2021.6.16.18:59
该方法也适用连接云服务器的postgresql数据库,不过需要将ip改为公网ip,这边举个栗子
公网ip为17.17.18.18
在pg_hba.conf里面则是为
host        all                all                17.17.18.18/0(这里一定要这样)                md5

上述方法于编写时间之前亲测!

OK,本文章结束了,感谢您的阅读,如有不足或啥相关问题请评论或私信告诉我,谢谢!感恩!

Original: https://www.cnblogs.com/skypeng/p/16694774.html
Author: 晓星晨曦
Title: 远程连接postgresql数据库-redhat版本(发现ing)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/365805/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 人工智能:语音识别技术介绍

    今天给大家介绍一下关于语音识别相关的知识,希望对大家有所帮助! 1、什么是语音 语音指的是人类通过发声器官发出来具有一定意义、用来沟通交流的声音。 计算机中语音存储:以波形文件的方…

    Python 2023年1月27日
    028
  • Bert 训练模型通过http方式提供服务

    1 如何通过http方式访问 bert 训练的模型进行预测结果的返回 2 注意各组件的版本,我用的是 python3.7.0 ,tensorflow 1.13.1 , bert-b…

    Python 2023年1月3日
    035
  • scrapy下载文件

    spider.py 导入用于保存文件下载信息的item类. 在爬虫类中解析文件url,并保存在列表中,根据需要提取标题等其它信息 返回赋值后的item类 import scrapy…

    Python 2023年1月25日
    018
  • 30岁转行网络安全来得及吗?有发展空间吗?

    30岁转行网络安全来得及吗?有发展空间吗? 现阶段,很多30岁左右的人群都面临就业难的问题,尤其是对于年龄已过30.没有一技之长的人。现阶段,网络安全行业已成了风口行业,也有很多3…

    Python 2023年1月20日
    019
  • flask-sqlalchemy操作mysql

    文章目录 1、简介 2、mysql连接设置 3、模型类字段类型 4、ORM使用方式 * 4.1、先创建模型类,再迁移到数据库 4.2、用原生SQL创建数据库表,再编写模型类作映射 …

    Python 2023年1月3日
    046
  • 华为OD机试题

    2022.6.27 星期一 机考3道题目,第一题100分,第二题100分,第三题200分,总分=sum(用例通过率*分数) 第一题:字符串消消乐。easy 字符串消消乐。相邻且相同…

    Python 2022年8月20日
    0140
  • Python——使用GDAL操作栅格数据(自用)

    range()函数 range()函数返回的是可迭代对象,不是列表类型 val1=range(5,0,-1) print(val1) (1) range(stop),例如range…

    Python 2023年1月12日
    026
  • Pygame简单深度优先算法生成迷宫

    学习路径计算之前需要一个场景,网上查了下迷宫生成方法花了点时间写了个简单的迷宫生成器基本原理十分简单:使用2维矩阵表示迷宫,每一个节点有四面墙,使用深度搜索,随机顺序向四个方向移动…

    Python 2023年1月20日
    020
  • 房屋千千万,如何找到便宜实惠的呢,python采集数据并做数据可视化~

    前言 嗨喽,大家好呀!这里是魔王呐~ 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install reques…

    Python 2022年9月3日
    096
  • 简单看懂编译链接

    在这里,我想任何人做编程相关的人都应该至少接触过某种编程语言,接触过程序的编译,执行过自己源代码产生的可执行文件。对于可执行文件我想不得不提需要关心的应该直接首先是两个: 1.可执…

    Python 2023年1月31日
    033
  • 在 Python 列表和字典里,这些坑你踩过吗

    Original: ython ] PyQt5 PySide2 笔记Author: PythonTitle: YEUNGCHIE

    Python 2022年9月3日
    0134
  • Django项目定期自动清除过期session的两种方法

    非自动方法 python manage.py clearsessions 第一种方法通用方法(利用APScheduler定时清除) 安装插件 pip install apsched…

    Python 2022年12月26日
    051
  • TCN代码详解-Torch (误导纠正)

    TCN代码详解-Torch (误导纠正) 1. 绪论 TCN网络由Shaojie Bai, J. Zico Kolter, Vladlen Koltun 三人于2018提出。对于序…

    Python 2023年1月29日
    024
  • python 实验七 字典与集合 (上)

    1.莫尔斯电码是一种早期的数字化通信形式,它通过”·”和”-“的不同排列顺序来表示不同的英文字母、数字以及标点符号。试编写程序,使用…

    Python 2022年12月23日
    047
  • Python 的二维数组,你写对了吗?

    这是「 刷题躲坑」系列的第一篇文章,这个系列帮助大家躲掉刷题/代码中常见的坑。 怪事 在 Python 中,定义长度为 3,数值全为 0 的一维 列表(也就是 数组)的方式有: a…

    2022年8月21日
    0173
  • 【Python计量】自相关性(序列相关性)的检验

    文章目录 一、图示法 * (一)滞后图 (二)自相关图 (三)自相关图和偏自相关图 二 、DW检验法 三、Breusch-Godfrey检验 * (一)手动编制函数进行BG检验 (…

    Python 2023年1月13日
    033
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总