重学JS: 数据类型及类型检测

栏目: JavaScript · 发布时间: 5年前

内容简介:JavaScript七种内置类型:除对象之外,其他统称为基本类型typeof运算符后面跟操作数,typeof operand 或者 typeof (operand),返回一个类型的字符串值。

数据类型

JavaScript七种内置类型:

  • 空值(null)
  • 未定义(undefined)
  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(object)
  • 符号(symbol)

除对象之外,其他统称为基本类型

类型检测

typeof

typeof运算符后面跟操作数,typeof operand 或者 typeof (operand),返回一个类型的字符串值。

示例:

typeof undefined === "undefined" // true
typeof true === "boolean" // true
typeof 1 === "number" // true
typeof 'test' === "string" // true
typeof {} === "object" // true
typeof Symbol() === "symbol" // true

特殊示例:

typeof null === "object"
typeof function () {} === "function"
typeof [1] === "object"

typeof 对null的处理有问题,正确的结果应该是"null",但是实际返回的是"object",这个bug由来已久,也许以后也不会修复。

typeof function() {}返回的是一个"function",似乎function也是JavaScript的一个内置对象,实际上函数是一个可调用对象,它有一个内部属性[[Call]],该属性使其可以被调用。

typeof [1]返回"object",说明数组也是object类型,实际上它是object的一个子类型,和普通对象通过字符串键索引不同,数组通过数字按顺进行索引。

总结表格:

重学JS: 数据类型及类型检测

instance

typeof是检测基本数据类型的最佳工具,但是检测引用类型的值时作用不大,都会返回"object",这时候就需要instance操作符了。instance运算符用于测试构造函数的protytpe属性是否出现在对象的原型链中的任何位置。

用法:object instanceof constructor,object: 要检测的对象,constructor某个构造函数

示例:

function A() {}
function B() {}
function C() {}
A.prototype = new C()
const a = new A()
console.log(a instanceof A) // a是A类的实例 true
console.log(a instanceof C) // A继承C true
console.log(a instanceof B) // a不是A类的实例 false
console.log(a instanceof Object) // Object实所有引用类型的父类 true
console.log(A.prototype instanceof Object) // true
A.prototype = {}
a1 = new A()
console.log(a1 instanceof A) // true
console.log(a instanceof A) // false
const date = new Date()
console.log(date instanceof Date) // true

原理

function instance_of(L, R) {//L 表示左表达式,R 表示右表达式
 var O = R.prototype;// 取 R 的显示原型
 L = L.__proto__;// 取 L 的隐式原型
 while (true) { 
   if (L === null) 
     return false; 
   if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true 
     return true; 
   L = L.__proto__; 
 } 
}

想要对instanceof运算符有更加深入的了解 车票

toString

toString()方法返回一个表示该对象的字符串,每个对象都有一个toString()方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString()方法被每个Object对象继承。如果此方法在自定义对象中未被覆盖,toString()返回"[object type]",其中type是对象的类型

示例

const toString = Object.prototype.toString
console.log(toString.call(null)) // [object Null]
console.log(toString.call(undefined)) // [object Undefined]
console.log(toString.call(new String)) // [object String]
console.log(toString.call(Function)) // [object Function]
console.log(toString.call(new Date)) // [object Date]
console.log(toString.call('new Date')) // [object String]
console.log(toString.call(['a'])) // [object Array]

从示例可以看出,Object.prototype.toString.call()可以准确表示数值的类型

总结

  • typeof运算符适合检测基本数据类型,且返回类型的字符串
  • instanceof运算符适合检测引用类型值
  • toString()返回对象的类型,可以准确判断数值的类型

以上所述就是小编给大家介绍的《重学JS: 数据类型及类型检测》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux内核设计的艺术

Linux内核设计的艺术

新设计团队 / 机械工业出版社华章公司 / 2011-6-20 / 79.00元

关于Linux内核的书已经不计其数,但这本书却是独树一帜的,它的内容代表着Linux内核研究成果的世界顶尖级水平,它在世界范围内首次提出并阐述了操作系统设计的核心指导思想——主奴机制,这是所有操作系统研究者的一笔宝贵财富。本书可能也代表着同类图书的顶尖水平,是一本真正能引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前唯一能从本质上指引我们去设计和开发拥有自主知识产权的操作系......一起来看看 《Linux内核设计的艺术》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具