toString()、typeof()和instanceof

2018-04-10  本文已影响0人  zjh111

toString()

| 类型 | 行为描述 |
| Array | 将 Array 的每个元素转换为字符串,并将它们依次连接起来,两个元素之间用英文逗号作为分隔符进行拼接。 |
| Boolean | 如果布尔值是true,则返回"true"。否则返回"false"。 |
| Date | 返回日期的文本表示。 |
| Error | 返回一个包含相关错误信息的字符串。 |
| Function | 返回如下格式的字符串,其中 functionname 是一个函数的名称,此函数的 toString 方法被调用: "function functionname() { [native code] }" |
| Number | 返回数值的字符串表示。还可返回以指定进制表示的字符串,请参考Number.toString()。 |
| String | 返回 String 对象的值。 |
| Object(默认) | 返回"[object ObjectName]",其中 ObjectName 是对象类型的名称。 |
| Symbol| 返回Symbol(内容)

使用Object.prototype.toString.call(obj)时会返回"[object 首字母大写数据类型]"
例如
obj为Function时返回"[object Function]"
obj为Symbol时返回"[object Symbol]"
obj为Array时返回"[object Array]"
obj为Date时返回"[object Date]"
obj为Object时返回"[object Object]"

typeof()

类型 结果
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Symbol (ECMAScript 6 新增) "symbol"
宿主对象(由JS环境提供) Implementation-dependent
函数对象([[Call]] 在ECMA-262条款中实现了) "function"
任何其他对象 "object" //array、正则等

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

// 定义构造函数
function C(){} 
function D(){} 

var o = new C();


o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype


o instanceof D; // false,因为 D.prototype不在o的原型链上

o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回true
C.prototype instanceof Object // true,同上

C.prototype = {};
var o2 = new C();

o2 instanceof C; // true

o instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上.

D.prototype = new C(); // 继承
var o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true
上一篇下一篇

猜你喜欢

热点阅读