详解Js数据类型种类以及判断数据类型的四种方法

详解Js数据类型相关

  • 数据类型相关
    • 有哪些数据类型?
    • null和undefined的区别是什么?
    • NaN是什么?如何判断一个变量是否为NaN
    • 什么是包装对象?
    • 数据类型实例
  • JavaScript中如何判断一个变量的数据类型?
      • typeOf
      • instanceof
      • toString
      • constructor

数据类型相关

有哪些数据类型?

一共九种
基本数据类型(7种):Number、String、Boolean、null、undefined、Symbol、bigInt。
复杂数据类型(2种):Object、function。
其中Symbol和BigInt是ES6新出现的数据类型。

null和undefined的区别是什么?

null为空指针对象,undefined为未定义的值。
在使用typeof方法判断时。因为历史遗留问题(null机器码为0而Object机器码为000),null被判断为Object,而undefined被判断为undefined。
在用Number方法进行数字转换时,null转换为0,undefined转换为NaN。
在数字运算中,一样如此,null+3=3,undefined+3=NaN

NaN是什么?如何判断一个变量是否为NaN

NaN 是 JavaScript 中的一个特殊值,表示 “Not a Number”,即不是数字。它是一个全局对象的属性,代表一个本来要返回数字的操作数未返回数字的情况。
两种方法判断,一种isNaN,isNaN原理是强制转换成数字,如果无法转换或者转换为NaN,则返回true。
另一种方法是Number.isNaN,这种方法则是不转换直接判断,如果参数值是NaN则返回true,否则返回false.

什么是包装对象?

包装对象是指针对原始值创建的临时对象,在进行操作时会自动转换为对应的原始值。例如,通过包装对象可以访问原始值的属性和方法。
如:Number、String、Boolean都是包装对象。

数据类型实例

let num=1;
let str='1'
let bol=true
let num1=new Number
let str1=new String
let bool1=new Boolean
let arr=[]
let obj={}
let sym=Symbol

在这里呢,我定义了一些数据:有常见的number、Boolean、String、Array、Object,也有不常见的Symbol。在定义数组或者对象时,可以用上述代码中的数组字面量[]和对象字面量来定义{}也可以通过new+构造函数来定义。

JavaScript中如何判断一个变量的数据类型?

typeOf

这个方法能判断出非null类型的基本数据类型,但对于所有null类型和复杂数据类型返回的永远是Object.(Functino除外)。
返回类型都是字符串格式。
例:

console.log(typeof(1));//number
		console.log(typeof('1'));//string
		console.log(typeof(null));//Object
		console.log(typeof(undefined));//undefined
		console.log(typeof(true));//boolean
		console.log(typeof([1,2,3]));//Object
		console.log(typeof({}));//Object

在上述代码中,我们能成功判断除了null之外的基本数据类型,而对复杂数据类型typeof的返回值永远是object

instanceof

语法格式:obj instanceof Object
判断左侧对象是否属于右侧特定类型或类的实例。返回true|false,可以检查复杂数据类型,不能检查基本数据类型。
实现原理:
1.获取左侧对象原型
2.获取右侧类型的构造函数的原型,并将它俩进行对比。
3.返回true|false。

toString

Object.prototype上有方法toString.call方法,返回的是[object xxx]格式。可以适用于所有数据类型的判断。

Object.prototype.toString.call(42); // "[object Number]"
Object.prototype.toString.call('Hello'); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(function() {}); // "[object Function]"

在上述代码中,我们发现toString.call返回值的格式都是**[object 数据类型]**,而它能准确的反应出每种数据的数据类型并按照这种返回值返回。

constructor

constructor 属性在 JavaScript 对象中用于指示对象所属的构造函数,可以进行复杂数据类型判断但不推荐,因为constructor可以被手动修改。同时它不适用与基本数据类型。

let obj={}
if(obj.constructor === Object){
	console.log(true);//true
}
obj.constructor='string'
console.log(obj.constructor);//string

你可能感兴趣的:(JavaScript,javascript,开发语言,ecmascript)