首页 > 社交 > 科普中国

JavaScript中的数据类型判断

常驻编辑 科普中国 2022-06-13 数据类型   数组   原型   字符串   函数   属性   对象   参数   类型   方法

其他任何对象Yfh拜客生活常识网

"object"Yfh拜客生活常识网


Yfh拜客生活常识网

原始值

除对象类型(object)以外的其它任何类型定义的不可变的值(值本身无法被改变)。例如(与 C 语言不同),JavaScript 中字符串是不可变的(译注:如,JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变)。我们称这些类型的值为“原始值”。Yfh拜客生活常识网


Yfh拜客生活常识网

特性

1、typeof 总是返回一个字符串。Yfh拜客生活常识网

2、typeof 能正确判断原始值的类型,null 除外;引用类型数据能正确判断 Function、函数的类型,其他的都会返回 'object'。Yfh拜客生活常识网


Yfh拜客生活常识网

示例

// 数值
console.log(typeof 37 === 'number') // true
console.log(typeof 3.14 === 'number') // true
console.log(typeof (42) === 'number') // true
console.log(typeof Math.LN2 === 'number') // true
console.log(typeof Infinity === 'number') // true
console.log(typeof NaN === 'number') // true 尽管它是 "Not-A-Number" (非数值) 的缩写
console.log(typeof Number(1) === 'number') // true Number 会尝试把参数解析成数值

console.log(typeof 42n === 'bigint') // true


// 字符串
console.log(typeof '' === 'string') // true
console.log(typeof 'bla' === 'string') // true
console.log(typeof `template literal` === 'string') // true
console.log(typeof '1' === 'string') // true 注意内容为数字的字符串仍是字符串
console.log(typeof (typeof 1) === 'string') // true typeof 总是返回一个字符串
console.log(typeof String(1) === 'string') // true String 将任意值转换为字符串,比 toString 更安全


// 布尔值
console.log(typeof true === 'boolean') // true
console.log(typeof false === 'boolean') // true
console.log(typeof Boolean(1) === 'boolean') // Boolean() 会基于参数是真值还是虚值进行转换
console.log(typeof !!(1) === 'boolean') // true 两次调用 ! (逻辑非) 操作符相当于 Boolean()


// Symbols
console.log(typeof Symbol() === 'symbol') // true
console.log(typeof Symbol('foo') === 'symbol') // true
console.log(typeof Symbol.iterator === 'symbol') // true


// Undefined
console.log(typeof undefined === 'undefined') // true
console.log(typeof declaredButUndefinedVariable === 'undefined') // true
console.log(typeof undeclaredVariable === 'undefined') // true


// 对象
console.log(typeof { a: 1 } === 'object') // true

// 使用 Array.isArray 或者 Object.prototype.toString.call
// 区分数组和普通对象
console.log(typeof [1, 2, 4] === 'object') // true

console.log(typeof new Date() === 'object') // true
console.log(typeof /regex/ === 'object') // true 历史结果请参阅正则表达式部分


// 使用 new 操作符
// 除 Function 外的所有构造函数的类型都是 'object'
var func = new Function()
console.log(typeof func) // 返回 'function'

var A = function() {}
var b = new A()
console.log(typeof b) // 返回 'object'

// 下面的例子令人迷惑,非常危险,没有用处。避免使用它们。
console.log(typeof new Boolean(true) === 'object') // true
console.log(typeof new Number(1) === 'object') // true
console.log(typeof new String('abc') === 'object') // true


// 函数
console.log(typeof function () { } === 'function') // true
console.log(typeof class C { } === 'function') // true
console.log(typeof Math.sin === 'function') // true


// Null
// JavaScript 诞生以来便如此
console.log(typeof null === 'object') // true

在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 "object"。(

相关阅读:

  • 设计模式之原型模式
  • Python八大数据类型
  • go语言如何入门呢?
  • 介绍一下西门子S7300PLC的S5定时器的S5TIME数据格式
  • 如何输入数组(如何将数字输入数组)
  • 指针怎么用 c语言指针与一维数组?
  • java
  • 集合篇
  • GO学习
  • 技巧篇:常用的vba代码汇总
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。