JavaScript 中有两个特殊数据类型: undefined 和 null, 先看看 undefined 的判断, 欢迎各位同仁交流一番:
第一次碰见 undefined 的时候, 我用的是 java 那一套, 我是这样处理的
- if (obj== undefined){
- /* 逻辑 */
- }
事实说明我是自作聪明了, 查询之发现, 大家通常正确的做法是这样的,
- if (typeof(obj) == "undefined") {
- /* 逻辑 */
- }
为什么会这样的呢? JS 怎么会多出这样一种数据类型呢? undefined 是怎样一种存在呢? 接下来就走进科学吧,
大多数计算机语言, 有且仅有一个表示 "无" 的值, 比如, 用过可知 C 语言的 NULL,Java 语言的 null, 查询可知 Python 语言的 None,Ruby 语言的 nil, 但是 JavaScript 是不一样的烟火, 它有两个表示 "无" 的值: undefined 和 null. 这是为什么?
1, 历史的行程
1995 年 JavaScript 诞生时如早一年的 Java 一样, 用 null 作为表示 "无" 的值. 根据 C 语言的传统, null 被设计成可以自动转为 0, 设计 Brendan Eich 觉得这样做还不够, 因为, null 在 Java 里被当成一个对象. 但是, JavaScript 的数据类型分成原始类型 (primitive) 和合成类型 (complex) 两大类, Brendan Eich 觉得表示 "无" 的值最好不是对象. 其次, JavaScript 的最初版本没有包括错误处理机制, 发生数据类型不匹配时, 往往是自动转换类型或者默默地失败. Brendan Eich 觉得, 如果 null 自动转为 0, 很不容易发现错误. 因此, Brendan Eich 又设计了一个 undefined.
2. 关于 undefined
undefined 表示一个未声明的变量, 或已声明但没有赋值的变量, 或一个并不存在的对象属性, 函数没有返回值时, 默认返回 undefined. 这是 undefined 的几种典型用法, 而判断一个变量是不是 undefined, 用 typeof 函数, typeof 函数主要是返回的是字符串, 主要这么几种:"number","string","boolean","object","function","undefined"
注释: null 表示无值, 而 undefined 表示一个未声明的变量, 或已声明但没有赋值的变量, 或一个并不存在的对象属性.
- new Promise(function (resolve, reject) {
- log('start new Promise...');
- var timeOut = Math.random() * 2;
- log('set timeout to:' + timeOut + 'seconds.');
- setTimeout(function () {
- if (timeOut < 1) {
- log('call resolve()...');
- resolve('200 OK');
- }
- else {
- log('call reject()...');
- reject('timeout in' + timeOut + 'seconds.');
- }
- }, timeOut * 1000);
- }).then(function (r) {
- log('Done:' + r);
- }).catch(function (reason) {
- log('Failed:' + reason);
- });
来源: http://www.bubuko.com/infodetail-3007477.html