typeof

2019-04-23  本文已影响0人  __笑我一世沉沦丶
var message = "some string";
typeof message;      // "string"
typeof (message) ;   // "string"
typeof null;           // "object"
typeof Array;          // "function"
typeof [1, 2, 333];    // "object"
typeof undefined;      // "undefined"
typeof 100;            // "number"
typeof false;          // "boolean"
typeof {a: 1};         // "boolean"
if(typeof a != "undefined"){
    //变量存在
} else {
    //变量不存在
}

instanceof

instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上

function Person(){};
function Student(){};
var p = new Person();
Student.prototype = p;               //继承原型
var s = new Student();
console.log(s instanceof Student);   //true
console.log(s instanceof Person);    //true
image.png

Object.prototype.toString.call(object)

// 基本类型
Object.prototype.toString.call(null);          // “[object Null]”
Object.prototype.toString.call(undefined);     // “[object Undefined]”
Object.prototype.toString.call("abc");         // “[object String]”
Object.prototype.toString.call(123);           // “[object Number]”
Object.prototype.toString.call(true);          // “[object Boolean]”
// 函数类型
function fn(){console.log("test");}
Object.prototype.toString.call(fn);              // “[object Function]”
// 日期类型
var date = new Date();
Object.prototype.toString.call(date);            // “[object Date]”
// 数组类型
var arr = [1,2,3];
Object.prototype.toString.call(arr);             // “[object Array]”
// 正则表达式
var reg = /[hbc]at/gi;
Object.prototype.toString.call(reg);             // “[object RegExp]”
function Person(name, age) {
    this.name = name;
    this.age = age;
}
var person = new Person("Rose", 18);
Object.prototype.toString.call(person); //“[object Object]”
function type(object) {
   return Object.prototype.toString.call(object).slice(8,-1).toLowerCase();
}
type(1)              // "Number"
type("abc")          // "String"

判断类型工具

比如文件名可以命名为type.js

function typeString(object) {
   return Object.prototype.toString.call(object).slice(8,-1).toLowerCase();
}

function isNull(object) {
    return typeString(object) === 'null';
}

function isUndefined(object) {
    return typeString(object) === 'undefined';
}

function isNumber(object) {
    return typeString(object) === 'number';
}

function isString(object) {
    return typeString(object) === 'string';
}

function isBoolean(object) {
    return typeString(object) === 'boolean';
}

function isFunction(object) {
    return typeString(object) === 'function';
}

function isArray(object) {
    return typeString(object) === 'array';
}

function isDate(object) {
    return typeString(object) === 'date';
}

function isRegExp(object) {
    return typeString(object) === 'regexp';
}

function isObject(object) {
    return typeString(object) === 'object';
}

module.exports = {
    typeString : typeString,
    isNull : isNull,
    isUndefined : isUndefined,
    isNumber : isNumber,
    isString : isString,
    isBoolean : isBoolean,
    isFunction : isFunction,
    isArray : isArray,
    isDate : isDate,
    isRegExp : isRegExp,
    isObject : isObject,
}

同时,可以写一个测试文件,比如命名为type_test.js

const type = require('./type.js')
const log = console.log;

// 基本类型
log(type.typeString(123));
log(type.isNumber(123));
log(type.typeString(null));
log(type.isNull(null));
log(type.typeString(undefined));
log(type.isUndefined(undefined));
log(type.typeString(`123`));
log(type.isString('123'));
log(type.typeString(true));
log(type.isBoolean(true));

// 函数类型
function fn() {
    console.log('test');
}
log(type.typeString(fn));
log(type.isFunction(fn));

// 日期类型
var date = new Date();
log(type.typeString(date));
log(type.isDate(date));

// 数组类型
var array = [1,2,3];
log(type.typeString(array));
log(type.isArray(array));

// 正则表达式
var reg = /[hbc]at/gi;
log(type.typeString(reg));
log(type.isRegExp(reg));

// 自定义类型
function Person(name, age) {
    this.name = name;
    this.age = age;
}
var person = new Person("Rose", 18);
log(type.typeString(person));
log(type.isObject(person));
module.exports = function typeString(object) {
   return Object.prototype.toString.call(object).slice(8,-1).toLowerCase();
}

typeof 是JavaScript的操作符,所以这里函数取名有意避开,用了一个typeString。当然,用其他名字也是可以的,比如直接type

上一篇 下一篇

猜你喜欢

热点阅读