Home > Article > Web Front-end > How does JavaScript determine data type? 8 ways to share
How does JavaScript determine the data type? This article will share with you 8 ways to use JS to determine data type, which can effectively help work and interviews. The interviewer smiled slightly after reading it.
Note: null
, NaN
, document.all
Judgment
console.log(typeof null); // object console.log(typeof NaN); // number console.log(typeof document.all); // undefined
constuctor
Points to the constructor that created the instance object Note that null
and undefined
do not have constructor
, and constructor
Can be rewritten
String.prototype.constructor = function fn() { return {}; }; console.log("云牧".constructor); // [Function: fn]
obj instanceof Type
Whether obj
is an instance of the Type
class, it can only be used to determine whether the reference data Type
is obj
An object on the prototype chainHandwritteninstanceof
:
function myInstanceof(Fn, obj) { // 获取该函数显示原型 const prototype = Fn.prototype; // 获取obj的隐式原型 let proto = obj.__proto__; // 遍历原型链 while (proto) { // 检测原型是否相等 if (proto === prototype) { return true; } // 如果不等于则继续往深处查找 proto = proto.__proto__; } return false; }
instanceof
console.log(Object.isPrototypeOf({})); // false console.log(Object.prototype.isPrototypeOf({})); // true 期望左操作数是一个原型,{} 原型链能找到 Object.prototype
function typeOf(data) { return Object.prototype.toString.call(data).slice(8, -1); } // 测试 console.log(typeOf(1)); // Number console.log(typeOf("1")); // String console.log(typeOf(true)); // Boolean console.log(typeOf(null)); // Null console.log(typeOf(undefined)); // Undefined console.log(typeOf(Symbol(1))); // Symbol console.log(typeOf({})); // Object console.log(typeOf([])); // Array console.log(typeOf(function () {})); // Function console.log(typeOf(new Date())); // Date console.log(typeOf(new RegExp())); // RegExp
kindof
and p-is-promise
p-is-promise:
const isObject = value => value !== null && (typeof value === "object" || typeof value === "function"); export default function isPromise(value) { return ( value instanceof Promise || (isObject(value) && typeof value.then === "function" && typeof value.catch === "function") ); }
kindof:
function kindof(obj) { var type; if (obj === undefined) return "undefined"; if (obj === null) return "null"; switch ((type = typeof obj)) { case "object": switch (Object.prototype.toString.call(obj)) { case "[object RegExp]": return "regexp"; case "[object Date]": return "date"; case "[object Array]": return "array"; } default: return type; } }
Object.prototype.toString
will read the valueclass MyArray { get [Symbol.toStringTag]() { return "MyArray"; } } const arr = new MyArray(); console.log(Object.prototype.toString.call(arr)); // [object MyArray]
undefined
, window
, document
, null
, etc.underscore.js:
##SummaryBasic data type | Reference type | Notes | |
---|---|---|---|
√ | × | NaN、object、document.all | |
√ Part | √ | can be rewritten | |
× | √ | Multi-window, right constructor or class | |
× | √ | Be careful with null and undefined | |
√ | √ | Be careful with built-in prototypes | |
- | √ | Compatible as a last resort | |
× | √ | Identify custom objects | |
√ | √ | Special objects |
is followed by a number
cannot be deleted
true
, otherwise it will return false
console.log(isNaN(NaN)); // true console.log(isNaN({})); // true
console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN({})); // false
's methods <pre class="brush:js;toolbar:false;">function isNaNVal(val) {
return Object.is(val, NaN);
}
function isNaNVal(val) {
return val !== val;
}
function isNaNVal(val) {
return typeof val === "number" && isNaN(val);
}
// 综合垫片
if (!("isNaN" in Number)) {
Number.isNaN = function (val) {
return typeof val === "number" && isNaN(val);
};
}</pre>
NaN
,includes
then you can
const arr = [NaN]; console.log(arr.indexOf(NaN)); // -1 console.log(arr.includes(NaN)); // true
The above is the detailed content of How does JavaScript determine data type? 8 ways to share. For more information, please follow other related articles on the PHP Chinese website!