JavaScript数据类型检测

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是对象");   // a是对象
    }
    if(b.constructor == Array){
      console.log("b是数组")  // b是数组
    }
    if(c.constructor == Function){
      console.log("c是函数")  // c是函数
	}
  </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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值