javascript 数据类型检测的方式:

声明变量

let

Let和var作用相似,只是let声明的范围是块作用域,var声明的范围是函数作用域

var

当省略关键词var时,这样定义的变量将成为全局变量(不过不建议这么做,太多的全局变量会让程序变得难以维护)

  1. function test(){    a="sichuan";   }  
  2. test();//调用函数  
  3. console.log(a);  

const

基本上和let相同,只是使用const时,必须同时初始化变量,且尝试修改const声明的变量时会报错

const n="zhang";
n="li";//TypeError: Assignment to constant variable.
const a=12;
const  a=9;//不可以重复声明

基本数据类型(在栈中存储,空间小,大小固定):String、Number、Boolean、Null、Undefined、(Symbol、BigInt)新增的

引用数据类型(在堆中存储,空间大,大小不固定):Object、function、Array

数据类型检测的方式:

(1)typeof

  1. 使用方式:   
  2. typeof 数据    
  3. 示例代码:  
  4. console.log(typeof 123);  //Number  
  5. console.log(typeof "Hello,World!");  //String  
  6. console.log(typeof true);  //Boolean  
  7. console.log(typeof undefined);  //Undefined 
  8. console.log(typeof function () {});  // function 
  9. bug实例
  10. console.log(typeof null);  //Object

typeof能检测到的数据有function、string,number,boolean, undefined,symbol,其他所有的类型,都会被检测为object。

(2)instanceof

  1. let a = [];  
  2. let b = function () {};  
  3. let c = 4;  
  4. let d = new Number(4);  
  5. console.log(a instanceof Array);  // true  
  6. console.log(b instanceof Function);  // true  
  7. console.log(c instanceof Number);  // false  
  8. console.log(d instanceof Number);  // true  

只能判断引用对象数据类型,不能判断基本数据类型,可以用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性
 

(3)constructor

        判断数据的类型

        对象实例通过constructor对象访问它的构造函数

  1. let a = [];  
  2. let b = function () {};  
  3. let c = 4;  
  4. let d = null;  
  5. console.log(a.constructor === Array);  
  6. console.log(b.constructor === Function);  
  7. console.log(c.constructor === Number);  
  8. console.log(d.constructor === null);  

// true
// true
// true
// 控制台报错

注意:
1. null 和 undefined 是无效的对象,因此是不会有 constructor 存在的。
2. 函数的 constructor 是不稳定的,当开发者重写 prototype 后,原有的 constructor 引用会丢失,constructor 会默认为 Object,它就不能用来判断数据类型了
 

(4)Object.prototype.toString.call()(推荐使用)
        该方法最繁琐,但最通用(基本和引用类型都可以检测)

  1. let a = [];  
  2. let b = function () {}  
  3. let c = 4;  
  4. let d = null;  
  5. console.log(Object.prototype.toString.call(a));  
  6. console.log(Object.pro  totype.toString.call(b));  
  7. console.log(Object.prototype.toString.call(c));  
  8. console.log(Object.prototype.toString.call(d));  

// [object Array]
// [object Function]
// [object Number]
// [object Null]
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值