zoukankan      html  css  js  c++  java
  • JavaScript中四种数据类型检测的方法

    js中有七大数据类型,分别是:字符串(String)、数字(Number)、布尔值(Boolean)、undefined、null、Object、Symbol。

    Symbol是ES6引入的一种新的原始数据类型,表示独一无二的值。(一般用来给对象做属性名)

    1 let s1 = Symbol(1);
    2 let s2 = Symbol(1);
    3 
    4 console.log(s1);  //Symbol(1)
    5 console.log(s2);  //Symbol(1)
    6 console.log(s1 == s2);  //false

    数据类型的检测,可以用typeof、instanceof、constructor、toString()。

    1、typeof

    1 console.log(typeof 1);//number
    2 console.log(typeof '你好');//string
    3 console.log(typeof true);//boolean
    4 console.log(typeof undefined);//undefined
    5 console.log(typeof null);//object
    6 console.log(typeof function () { });//function
    7 console.log(typeof {});//object
    8 console.log(typeof []);//object
    9 console.log(typeof /d/);//object

    2、instanceof

    instanceof运算符,用来判断一个构造函数的prototype属性指向的对象是否存在另外一个要检测对象的原型链上。

    null和undefined会报错。

    1 console.log(new Number(1) instanceof Number);//true
    2 console.log(new String('你好') instanceof String);//true
    3 console.log(new Boolean(true) instanceof Boolean);//true
    4 console.log(function () { } instanceof Function);//true
    5 console.log({} instanceof Object);//true
    6 console.log([] instanceof Array);//true
    7 console.log(/d/ instanceof RegExp);//true

    3、constructor

    constructor 原型对象的一个默认属性存在,表示创建实例的构造函数的引用。

    1 console.log((1).constructor);//function Number()
    2 console.log(('你好').constructor);//function String()
    3 console.log((true).constructor);//function Boolean()
    4 console.log((function () { }).constructor );//function Function()
    5 console.log(({}).constructor);//function Object()
    6 console.log(([]).constructor);//function Array()
    7 console.log((/d/).constructor);//function RegExp()

    4、toString

     1 console.log(Object.prototype.toString.call(123).slice(8, - 1));//Number
     2 console.log(Object.prototype.toString.call(123));//[object Number]
     3 console.log(Object.prototype.toString.call('你好'));//[object String]
     4 console.log(Object.prototype.toString.call(undefined));//[object Undefined]
     5 console.log(Object.prototype.toString.call(null));//[object Null]
     6 console.log(Object.prototype.toString.call(function () { }));
     7 //[object Function]
     8 console.log(Object.prototype.toString.call([]));//[object Array]
     9 console.log(Object.prototype.toString.call({}));//[object Object]
    10 console.log(Object.prototype.toString.call(/d/));//[object RegExp]

     注释:ES3中,Object.prototype.toString方法会执行下面的操作步骤:

    1.获取this对象的[[Class]]属性的值;

    2.计算出三个字符串"[object" + 第一步的操作结果 + "]" 连接后的新字符串;

    3.返回第二部的操作结果;

    其中[[Class]]是一个内部属性,所有的对象都拥有该属性。是一个字符串值,表明了该对象的类型。有且只有Object.prototype.toString能调用。

    null和undefined并不属于[[Class]]属性的值,那么为什么会输出[object Undefined]和[object Null]呢?

    是因为ES5中对Object.prototype.toString的规范中,先判断,如果this值为undefined,返回[object Undefined];其次,如果this的值为null,则返回[object Null];

    返回的类型也比ES3多了两种--->arguments对象的[[Class]]成为了"Arguments",而不是之前的"object";全局对象JSON,他的[[Class]]值为"JSON"。

  • 相关阅读:
    p3c安装使用 编码规范扫描 阿里巴巴出品,挺好用的
    Ideal test 不执行main方法了
    Maven 3-Maven依赖版本冲突的分析及解决小结
    (String)强制转换、toString()和String.valueOf()的区别
    Linux tail 命令详解
    iconv的安装和使用
    daemon函数的原理及使用详解
    SQL Sever 2012 如何建立数据库连接
    Navicat Premium 将sqlserver 数据库 导入mysql 中
    MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
  • 原文地址:https://www.cnblogs.com/yznotes/p/12383462.html
Copyright © 2011-2022 走看看