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