简介
字符串、数字、布尔值、Null、Undefined、对象、数组、函数、推断要领
JavaScript 中有两种数据范例,分别是基础数据范例和援用数据范例:
基础数据范例 | 援用数据范例 |
---|---|
Number、String、Boolean、Null、Undefined、Symbol | Object、Array、Function |
在开辟过程当中我们有时候会须要对变量举行范例推断,平常是应用 typeof
并搭配响应的特征
来完成。
Number
推断一个变量是不是是 Number
能够应用 typeof
推断是不是是 number
然则有个小坑就是 typeof NaN === number
,能够应用 NaN !== NaN
的特征来加以推断。
const isNumber = val => typeof val === 'number' && val === val;
String
推断 String
就很简朴了没有那么多弯弯绕绕一个 typeof
搞定。
const isString = val => typeof val === 'string';
Boolean
Boolean
的推断也很简朴运用 typeof
,固然也能够运用 ===
来举行推断。
const isBoolean = val => typeof val === 'boolean';
Null 和 Undefined
为何要把这两个数据范例放在一同讲呢?
在其他编程语言中每每只要 Null
、Undefined
、Nil
中的个中一个,而 JavaScript 却把它们两个都零丁举行了定义:
称号 | 定义 |
---|---|
null | 是一个对象,示意无值 |
undefined | 是一个迥殊属性,其值是未定义,示意缺乏值 |
因为在 JavaScript 中都有本身定义对应的值直接应用值来推断就能够了:
const isNull = val => val === null;
const isUndefined = val => val === undefined;
const isNil = val => val === undefined || val === null;
Symbol
Symbol
是 ES6 新引入的数据范例用于示意示意举世无双的值,因为是新引入并没有迥殊大的坑直接应用 typeof
梭它就对了。
const isSymbol = val => typeof val === 'symbol';
Object
Null 也是对象须要举行推断。
Object
能够是 PlainObject
字面量对象 也能够是由 new
操作符天生的对象:
在 JavaScript 中能够应用函数来完成类的功用:
function Person (name) {
this.name = name;
}
var person = new Person('xiaoer')
关于如许的类对象 和 字面量对象、类对象范例 我们都能够运用下面要领举行推断,Object.constructor
当碰到 Null 和 Undefined 会返回一个空对象,不然则会返回赋予的对象。
const isObject = obj => obj === Object(obj);
而字面量对象则指的是经由过程 Object.constructor
要领建立的对象,固然 const a = {a: 1}
如许声明建立的对象实在也是调用了Object.constructor
要领,应用 constructor
和 typeof
则能够举行推断。这里奇妙的应用 !!
来举行布尔值的转换来推断是不是为 Null 和 Undefined:
const isPlainObject = val => !!val && typeof val === 'object' && val.constructor === Object;
Array
Array
算是一个迥殊的 Object
不信你用上面的对象要领推断看看就知道了。
那我们这么推断
Array
呢?
ES6
供应了一个推断数组的要领 Array.isArray
,然则假如你在运用不支持 ES6
的浏览器时须要本身完成一下这个要领了:
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
Function
Function
在援用数据范例中算是简朴只须要运用 typeof
举行推断:
const isFunction = val => typeof val === 'function';
JSON
在一样平常开辟中 JSON
实在是太常常运用拉,在这里我们也把它当作一种“范例”给出它的推断要领:
const isValidJSON = str => {
try {
const o = JSON.parse(str)
return o != null && typeof o === "object"
} catch (e) {
return false;
}
};
最终奥义
内容太多让你没法呼吸了?
没事小二这里另有杀手锏能够供应人人运用:
function getType(obj) {
if(obj && obj.constructor && obj.constructor.name) {
return obj.constructor.name;
}
return Object.prototype.toString.call(obj).replace(/^\[object (.+)\]$/,"$1").toLowerCase();
}
须要注重的是 NaN
在这里照旧返回的是 ‘number’,在 逐日 30 秒 ⏱ 最终等号 中有同砚提问了为何没有对 NaN
举行推断,在一样平常开辟中涌现 NaN
是一件不好的事变,所以小二就没有把它加到推断中去了,假如有须要能够应用 isNaN()
这个要领来举行推断。
一同生长
在疑心的城市里总少不了并肩偕行的
同伴
让我们一同生长。
- 假如您想让更多人看到文章能够点个
点赞
。 - 假如您想鼓励小二能够到 Github 给个
小星星
。 - 假如您想与小二更多交换增加微信
m353839115
。
本文原稿来自
PushMeTop