JavaScript 新增两个原始数据类型

Posted 前端印象

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 新增两个原始数据类型相关的知识,希望对你有一定的参考价值。

大家好,我是,这俩是啥呢?其实就是一个进行比较判断,因为每个生成的对象在内存中的地址都不一样

Tuple 将普通的对象和数组转换

JSON.stringfy 两个方法嘛,据说草案中还提到一个不错的想法,那就是给 JSON 对象新增一个 parseImmutable 方法,功能应该就是直接将一个 Record字符串或Tuple字符串 解析成对应的Record和Tuple对象

文件内容如下:

即可获得结果

更多用法见 Babel 官方文档

https://babeljs.io/docs/en/babel-plugin-proposal-record-and-tuple#docsNav

这个特性,那么基于这个特性,Record 和 Tuple 有哪些应用场景呢?

  • 用于保护一些数据,比如函数的返回值、对象内部的静态属性...
  • 既然具有只读的特性,即不可变对象,那应该也可以作为对象的 key 值吧?
  • 最后

    我是零一,分享技术,不止前端!下期见~

    往期推荐

    这不是我认识的 MDN 吧?

    CSS状态管理,玩出花了!

    大开眼界:CSS指纹

    Node18 即将支持 import HTTP资源!


    有了这两个新的原始数据类型,你能想到什么应用场景?」欢迎在评论区留言!

    javascript数据类型及判断

    javascript数据类型:

    基础数据类型

    js数据分为两种类型:原始数据类型和引用数据类型。

    原始数据类型有:string、number、boolean、undefined null Symbol(ES6新增)
    引用数据类型有:Function、Object、Date、RegExp、Number、String、Boolean和自定义类等

    基础数据类型判断

    1、typeof()函数
    对于原始数据类型,我们可以使用typeof()函数来判断他的数据类型:

    typeof(1)                              //number
    typeof("1")                            //string
    typeof(true)                           //boolean
    typeof(undefined)                      //undefined
    typeof(null)                           //object
    为什么 typeof 运算符对于 null 值会返回 "object"。
    这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。
    现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。

    2、instanceof
    typeof()函数对于原始类型的判断还差强人意,但他是没法用来区分引用数据类型的,因为所有的引用数据类型都会返回"object"。于是javascript引入了java中使用的instanceof,用来判断一个变量是否是某个对象的实例,所以对于引用类型我们使用instanceof来进行类型判断。

    var obj = {};
    obj instanceof Object;           //true
    
    var arr = [];
    arr instanceof Array;           //true
    
    var now = new Date();
    now instanceof Date;             //true
    
    var func = function(){};
    func instanceof Function;        //true
    
    var str = "string";
    str instanceof String;           //false

    3、Object.prototype.toString.call()
    在javascript高级程序设计中提供了另一种方法,可以通用的来判断原始数据类型和引用数据类型。
    常用的类型判断函数:

        // 是否是字符串
        function isString(value){
            return Object.prototype.toString.call(value) == "[object String]";
        }
        // 是否是数字
        function isNumber(value){
            return Object.prototype.toString.call(value) == "[object Number]";
        }
        // 是否是布尔值
        function isBoolean(value){
            return Object.prototype.toString.call(value) == "[object Boolean]";
        }
        // 是否undefined
        function isUndefined(value){
            return Object.prototype.toString.call(value) == "[object Undefined]";
        }
        // 是否是null
        function isNull(value){
            return Object.prototype.toString.call(value) == "[object Null]";
        }
        // 是否数组
        function isArray(value){
            return Object.prototype.toString.call(value) == "[object Array]";
        }
        // 是否是函数
        function isFunction(value){
            return Object.prototype.toString.call(value) == "[object Function]";
        }
        // 是否是对象
        function isObject(value){
            return Object.prototype.toString.call(value) == "[object Object]";
        }
        // 是否是正则表达式
        function isRegExp(value){
            return Object.prototype.toString.call(value) == "[object RegExp]";
        }
        // 是否是日期对象
        function isDate(value){
            return Object.prototype.toString.call(value) == "[object Date]";
        }

    4、constructor

    在W3C定义中的定义:constructor 属性返回对创建此对象的数组函数的引用

    就是返回对象相对应的构造函数。从定义上来说跟instanceof不太一致,但效果都是一样的

    如: (a instanceof Array) //a是否Array的实例?true or false

      (a.constructor == Array) // a实例所对应的构造函数是否为Array? true or false

    举个例子:

    function employee(name,job,born){
        this.name=name;
        this.job=job;
        this.born=born;
    }
    
    var bill=new employee("Bill Gates","Engineer",1985);
    console.log(bill.constructor);
     //输出
     //function employee(name, jobtitle, born){
     //this.name = name; this.jobtitle = job; this.born = born;
     //}

    那么判断各种类型的方法就是:

    console.log([].constructor == Array);
    console.log({}.constructor == Object);
    console.log("string".constructor == String);
    console.log((123).constructor == Number);
    console.log(true.constructor == Boolean);

    较为严谨并且通用的方法:

    function isArray(object){
        return object && typeof object==='object' &&
                Array == object.constructor;
    }

    5、jquery判断js数据类型

    $.isArray([1,2]);              // 数组
    $.isFunction(function () { }); // 函数function
    $.isEmptyObject(null);         // null,undefind
    $.isXMLDoc();    // xml
    typeof (2) === "number";    // 数字
    typeof ("2") === "string";  // 字符串
    typeof (true) === "boolean";// bool型
    typeof (function () { }) === "function";// 函数function

    以上是关于JavaScript 新增两个原始数据类型的主要内容,如果未能解决你的问题,请参考以下文章

    JavaScript 新增两个原始数据类型

    javascript数据类型及判断

    JavaScript即将推出新的两个原始数据类型

    JavaScript即将推出新的两个原始数据类型

    JavaScript即将推出新的两个原始数据类型

    向ES6看齐,用更好的JavaScript