博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript的一些概念: typeof, null, 和 undefined
阅读量:7076 次
发布时间:2019-06-28

本文共 3588 字,大约阅读时间需要 11 分钟。

hot3.png

typeof, null, 和 undefined

1. typeof

typeof 操作符返回一个字符串,表示未经求值的操作数(unevaluated operand)的类型。

语法:typeof operand 参数:operand 是一个表达式,表示对象或原始值,其类型被返回。 描述E:此表总结了 typeof 可能的返回值。

类型 结构
Undefined "undefined"
Null "object" 
布尔值 "boolean"
数值 "number"
字符串 "string"
Symbol (ECMAScript 6 新增) "symbol"
宿主对象(JS环境提供的,比如浏览器) Implementation-dependent
函数对象 (implements [[Call]] in ECMA-262 terms) "function"
任何其他对象 "object"

实例:

typeof "John"                // 返回 stringtypeof ""                    // 返回 stringtypeof 3.14                  // 返回 numbertypeof true                  // 返回 booleantypeof false                 // 返回 booleantypeof [1,2,3,4]             // 返回 objecttypeof {name:'John', age:34} // 返回 object

Notes:

在JavaScript中,数组是一种特殊的对象类型。 因此 typeof [1,2,3,4] 返回 object。

2. Null

null 是一个 JavaScript 字面量,表示空值(null or an "empty" value),表示 "什么都没有"。即没有对象被呈现(no object value is present)。 null 是一个只有一个值的特殊类型。表示一个空对象引用。它是 JavaScript 的原始值之一。 null 是一个字面量(而不是全局对象的一个属性,undefined 是)

Note: 用 typeof 检测 null 返回是object。

Note: ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。

实例

可以设置为 null 来清空对象:var person = null;     // Value is null, but type is still an object也可以设置为 undefined 来清空对象:var person = undefined; // 值为 undefined, type is undefined

3. Undefined

undefined有多重角色,通常情况下,我们所说的undefined都指的是全局对象的一个属性"undefined".

在 JavaScript 中, undefined 是一个没有设置值的变量。typeof 一个没有值的变量会返回 undefined。

一个未初始化的变量的值为undefined. 一个没有传入实参的形参变量的值为undefined. 如果一个函数什么都不返回,则该函数默认返回undefined.

在JavaScript中,undefined这个词有多重含义:

(1) 首字母大写的Undefined表示的是一种数据类型; (2) 小写的undefined表示的是属于这种数据类型的唯一的一个值; 但这两种undefined都只能存在于文档或规范中,不能存在于JavaScript代码中.

在JavaScript代码中,我们看到的undefined最有可能是全局对象的一个属性,该属性的初始值是就是前面所说的原始值undefined.

还有种情况就是,这个undefined是个局部变量,就像其他普通变量一样,没有任何特殊性,它的值不一定是undefined,但通常情况下都是的.

下面我们所说的undefined,都指的是window.undefined这个属性.

实例:

var person; // Value is undefined, type is undefined可以使用严格相等运算符来判断一个值是否是undefined:var x;if ( x === undefined ) {   // 执行到这里} else {   // 不会执行到这里}

这里必须使用严格相等运算符===,而不能使用普通的相等运算符==.

因为x == undefined成立还可能是因为x为null,在JavaScript中null== undefined是返回true的.

另外,还可以使用typeof来判断:

var x;if (typeof x === 'undefined') {   // 执行到这里}

任何变量都可以通过设置值为 undefined 来清空。 类型为 undefined. 实例 person = undefined; // 值为 undefined, type is undefined

4 NaN 值

NaN 是一个全局对象的属性,表示 Not-A-Number 的值,是一个特殊值。

在编码很少直接使用到 NaN。通常都是在计算失败时,作为 Math 的某个方法的返回值出现的(例如:Math.sqrt(-1))或者尝试将一个字符串解析成数字但失败了的时候(例如:parseInt("blabla"))。

NaN 不等于自己, 即 NaN == NaN 返回的是 false 判断一个值是否是 NaN, 必须使用 Number.isNaN() 或 isNaN() 函数

isNaN() 函数用于检查其参数是否是非数字值。 isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。 如果isNaN函数的参数不是Number类型, isNaN()会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。

isNaN(123);   // 返回 falseisNaN(-1.23); // 返回 falseisNaN(5-2);   // 返回 falseisNaN(0);     // 返回 falseisNaN("0");   // 返回 falseisNaN(true);  // 返回 false: 因为Number(true)是1 isNaN(false); // 返回 false: 因为Number(false)是0 isNaN(null);  // 返回 false: 因为Number(null)是0 isNaN("Hello");      // 返回 trueisNaN("2016/07/11"); // 返回 trueisNaN(NaN);       // 返回 trueisNaN(undefined); // 返回 trueisNaN({});        // 返回 true// datesisNaN(new Date());                // 返回 falseisNaN(new Date().toString());     // 返回 true

5 undefined 和 Null 的区别

typeof undefined    // 返回undefinedtypeof null         // 返回object (bug in ECMAScript, should be null)null === undefined  // 返回falsenull == undefined   // 返回true

6 underfined和"undefined"的区别:

undefined是JavaScript提供的一个"关键字",而"undefined"就是一个字符串,只是字符串的内容长得和undefined一样而已。

typeof undefined    // 返回undefinedtypeof "undefined"  // 返回string

参考链接:

转载于:https://my.oschina.net/wangyongtao/blog/709974

你可能感兴趣的文章
parted用法
查看>>
转 > map和reduce 个数的设定 (Hive优化)经典
查看>>
eclipse安装pydev插件时没有任何错误提示,但是就是装完了后不显示pydev的设置项...
查看>>
IDC:中国安全市场发展潜力巨大
查看>>
javaScript中的this指针
查看>>
arp简析
查看>>
Cookbook系列之Cpp:杂项
查看>>
第八章 前七章总结考试
查看>>
Linux 服务器的安装规划
查看>>
我的友情链接
查看>>
一次union all 的优化
查看>>
设计师必看的8个TED 演讲
查看>>
python from-import语句用法
查看>>
安装IDES时出现的错误
查看>>
多浏览器支持ActiveX控件
查看>>
Fragment的学习
查看>>
如何在LLDB下排查message sent to deallocated instance问题
查看>>
#define
查看>>
我有一个idea,但是没有钱,又没技术怎么办?
查看>>
网页文字图片异步加载方式
查看>>