夜下客

繁体版 简体版
夜下客 > JS修炼法则 > 第4章 JS类型判断

第4章 JS类型判断

VAL_TO_OBJECT(v);

if (obj &&

(ops = obj - > map - > ops,

ops == & js_ObjectOps ?

(clasp = OBJ_GET_CLASS(cx, obj),

clasp - > call || clasp == & js_FunctionClass) // (3,4)

ops - > call != 0)) { // (3)判断是否为数字

type = JSTYPE_FUNCTION;

} else {

type = JSTYPE_OBJECT;

} else if (JSVAL_IS_NUMBER(v)) {

type = JSTYPE_NUMBER;

} else if (JSVAL_IS_STRING(v)) {

type = JSTYPE_STRING;

} else if (JSVAL_IS_BOOLEAN(v)) {

type = JSTYPE_BOOLEAN;

2. instanceof 关键字 constructor 属性

2-1.语法

object instanceof constructor

object: 某个实例对象

constructor: 某个构造函数

instanceof 运算符用来 在运行时 检测 constructor.prototype 是否存在于参数 object 的原型链上。

左侧应是对象,若不是,直接返回 false。

非标准的__proto__ 伪属性 可以改变对象的原型,此处例如Parent.__proto__=A 则原图会指向 A 函数 prototype: 显式原型__proto__: 隐式原型

2-2.优点

用于区分引用数据类型

2-3.缺点

不能用来检测基本数据类型

2-4.代码实践

// 基本数据类型

let number = 123

let string = 'aj'

let boolean = false

let symbol = Symbol('symbol')

let bigint = BigInt(10)

console.log(number instanceof Number) // false

console.log(string instanceof String) // false

console.log(boolean instanceof Boolean) // false

console.log(symbol instanceof Symbol) // false

console.log(bigint instanceof BigInt) // false

// TypeError: Right-hand side of 'instanceof' is not an object

console.log(null instanceof null)

// TypeError: Right-hand side of 'instanceof' is not an object

console.log(undefined instanceof undefined)

// 引用数据类型

let newNumber = new Number(123)

let newString = new String('aj')

let newBoolean = new Boolean(false)

function Fn() {}

let

『加入书签,方便阅读』