JS编程建议——6:正确处理JavaScript特殊值(1)

简介: 6:正确处理JavaScript特殊值(1)

建议6:正确处理JavaScript特殊值(1)
1.正确使用NaN和Infinity
NaN是IEEE 754中定义的一个特殊的数量值。它不表示一个数字,尽管下面的表达式返回的是true。

  1. typeof NaN === 'number' // true
    该值可能会在试图将非数字形式的字符串转换为数字时产生,例如:
    • '0' // 0
    • 'oops' // NaN
      如果NaN是数学运算中的一个运算数,那么它与其他运算数的运算结果就会是NaN。如果有一个表达式产生出NaN的结果,那么至少其中一个运算数是NaN,或者在某个地方产生了NaN。

可以对NaN进行检测,但是typeof不能辨别数字和NaN的区别,并且NaN不等同于它自己,所以,下面的代码结果令人惊讶。

  1. NaN === NaN // false
  2. NaN !== NaN // true
    为了方便检测NaN值,JavaScript提供isNaN静态函数,以辨别数字与NaN区别。
  3. isNaN(NaN) // true
  4. isNaN(0) // false
  5. isNaN('oops') // true
  6. isNaN('0') // false
    判断一个值是否可用做数字的最佳方法是使用isFinite函数,因为它会筛除掉NaN和Infinity。Infinity表示无穷大。当数值超过浮点数所能够表示的范围时,就要用Infinity表示。反之,负无穷大为–Infinity。

使用isFinite函数能够检测NaN、正负无穷大。如果是有限数值,或者可以转换为有限数值,那么将返回true。如果只是NaN、正负无穷大的数值,则返回false。
不幸的是,isFinite会试图把它的运算数转换为一个数字。因此,如果值不是一个数字,使用isFinite函数就不是一个有效的检测方法,这时不妨自定义isNumber函数。

  1. var isNumber = function isNumber(value) {
  2. return typeof value === 'number' && isFinite(value);
  3. }
    2.正确使用null和undefined

JavaScript有5种基本类型:String、Number、Boolean、Null和Undefined。前3种都比较好理解,后面两种就稍微复杂一点。Null 类型只有一个值,就是null;Undefined类型也只有一个值,即undefined。 null 和undefined都可以作为字面量在 JavaScript 代码中直接使用。
null与对象引用有关系,表示为空或不存在的对象引用。当声明一个变量却没有向它赋值的时候,它的值就是undefined。undefined的值会在如下情况中出现:
从一个对象中获取某个属性,如果该对象及其prototype链中的对象都没有该属性,该属性的值为undefined。
一个函数如果没有显式通过return语句将返回值返回给其调用者,其返回值就是undefined,但在使用new调用函数时例外。
JavaScript的函数可以声明任意多个形参,当该函数实际被调用时,传入的参数的个数如果小于声明的形式参数的个数,那么多余的形式参数的值为undefined。
如果对值为null的变量使用typeof检测,得到的结果是“object”,而typeof undefined的值为“undefined”。null == undefined, null !== undefined。

相关文章
|
24天前
|
机器学习/深度学习 人工智能 JavaScript
js和JavaScript
js和JavaScript
21 4
|
1天前
|
JavaScript 前端开发
js开发:请解释this关键字在JavaScript中的用法。
【4月更文挑战第23天】JavaScript的this关键字根据执行环境指向不同对象:全局中指向全局对象(如window),普通函数中默认指向全局对象,作为方法调用时指向调用对象;构造函数中指向新实例,箭头函数继承所在上下文的this。可通过call、apply、bind方法显式改变this指向。
7 1
|
23天前
|
JavaScript 前端开发
JavaScript生成的随机数随机字符串JS生成的随机数随机字符串
JavaScript生成的随机数随机字符串JS生成的随机数随机字符串
14 1
|
1月前
|
JavaScript 前端开发
js开发:请解释什么是模块化(modularization),并说明如何在JavaScript中实现模块化。
模块化将复杂系统拆分为松散耦合的模块,提高代码可读性、可维护性、可复用性和可扩展性。JavaScript模块化历经CommonJS(Node.js中常见,使用`require()`和`module.exports`)、AMD(RequireJS,异步加载,`define()`和`require()`)和ES6 Modules(官方标准,`import`和`export`)三个阶段。打包工具如Webpack、Rollup处理兼容性问题,使模块化代码能在各种环境中运行。
|
1月前
|
JavaScript 前端开发
js开发:请解释this关键字在JavaScript中的用法。
JavaScript中的`this`关键字根据执行上下文指向不同对象:全局作用域中指向全局对象(如`window`),普通函数中默认指向全局对象,但作为对象方法时指向该对象。在构造函数中,`this`指向新实例。箭头函数不绑定`this`,而是继承上下文的`this`值。可通过`call`、`apply`、`bind`方法显式改变`this`指向。
10 2
|
1月前
|
存储 JavaScript 编译器
这款国产中文编程火了!通过文言文编译生成Python、JS、Ruby代码!
这款国产中文编程火了!通过文言文编译生成Python、JS、Ruby代码!
|
JSON JavaScript 前端开发
javascript挑战编程技能-第九题:数据结构
javascript挑战编程技能-第九题:数据结构
100 0
|
JavaScript 前端开发
javascript挑战编程技能-第八题:99乘法表
javascript挑战编程技能-第八题:99乘法表
133 0
javascript挑战编程技能-第八题:99乘法表
|
JavaScript 前端开发 算法
javascript挑战编程技能-第七题:让代码做重复的事情
javascript挑战编程技能-第七题:让代码做重复的事情
95 0
|
JavaScript 前端开发 算法
javascript挑战编程技能-第六题:检查密码强度
javascript挑战编程技能-第六题:检查密码强度
199 0
javascript挑战编程技能-第六题:检查密码强度