JavaScript数据类型检测
程序员文章站
2022-06-05 08:05:45
...
1.数据类型
基本数据类型:
- Symbol(ES6新增,表示独一无二的值)、Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)
复杂数据类型:
- 对象(包括对象、数组、函数等)
两种类型区别:
- 存储位置不同:基本类型是存储在栈中的简单数据段,复杂数据类型是存储在堆中的对象。
- 访问方式不同:基本数据类型按值访问,复杂类型按引用访问。
2.使用typeof进行数据类型检测
原始数据:typeof运算符返回一下原始类型之一
- String
- number
- boolean
- undefined
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
console.log(typeof "jay") // string
console.log(typeof (7+8)) // number
console.log(typeof true) // boolean
console.log(typeof undefined) // undefined
</script>
</body>
</html>
复杂数据:运算符可返回以下两种类型之一
- function
- object(typeof运算符把对象、数组或null返回object)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
console.log(typeof null) // object
console.log(typeof []) // object
console.log(typeof {}) // object
console.log(typeof function myfunction(){}) // function
</script>
</body>
</html>
2.使用constructor进行数据类型检测
constructor是Object类型的原型属性,它能够返回当前对象的构造器(类型函数等)。利用该属性,可以检测符合型数据的类型,如对象、数组和函数等。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
var a = {};
var b = [];
if(a.constructor == Object){
console.log("a是对象");
}
if(b.constructor == Array){
console.log("b是数组")
}
</script>
</body>
</html>
undefined和null没哟constructor属性,不能够直接读取,否则会抛出异常。因此,一般应先检测值是否为undefined等特殊值,然后在调用constructor属性。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
var a = undefined;
console.log(a && a.constructor); // undefined
var b = null;
console.log(b && b.constructor); // null
</script>
</body>
</html>
数值直接量也不能直接读取constructor属性,应该先把它转换为对象再调用。
console.log(1.constructor); // 抛出异常
console.log((1).constructor); // 返回Number类型
console.log(Number(10).constructor); // 返回Number类型
3.使用toString进行数据类型转换
在对象上调用object的原型方法toString(),就会返回统一格式的字符串表示。
a = [];
b = {};
c = function myfuction(){}
console.log(toString.apply(a)); // [object Array]
console.log(toString.apply(b)); // [object Object]
console.log(toString.apply(c)); // [object Function]
上一篇: 我卡里还有两块,也能去里面取吗