美文网首页
js数据数据类型及常用检查,转换方法

js数据数据类型及常用检查,转换方法

作者: 牛妈代代 | 来源:发表于2019-12-20 12:09 被阅读0次

    常见数据类型:基础数据类型+符合数据类型
    基础数据类型
    (1)String
    (2)Boolean
    (3)Number
    (4)Symbol
    (5)Undefine
    (6)Null(typeof(null)==="object")

    符合数据类型
    (1)array:数组类型
    (2)object:对象行,包括Date,Error,Math,RegExp(正则)。arr也属于对象型;
    (3) NaN:不是数值型
    (4)Set:es6新增数据类型,类数组,数据具有唯一性;
    (5)Map:es6新增数据类型,类对象名,属性可以是number型

    判断数据类型
    (1)typeof 查看数据类型,返回值六种string字符串: "number," "string," "boolean," "object," "function" ,"undefined."以及'symbol' 。
    (2)instanceof判断已知对象类型的方法,instanceof判断对象的构造函数,返回布尔值
    (3)根据对象的constructor判断: constructor,注意: constructor 在类继承时会出错
    (4)通用但很繁琐的方法: prototype
    (5)无敌万能的方法:jquery.type(),jquery方法
    备注:null被认为是空的对象引用;只声明不赋值的变量会返回undefined类型。

    数据类型转换:字符串优先原则;分为显式转换,隐式转换;

    (1)转换成字符串
    toString():转换成字符串,null和undefined会报错
    String():可以把null、undefind转换成字符串
    +"";快速转换字符串,适合unll和undefined;相同类型相加,不同类型需要转换其中一个,字符串优先原则;

    (2)转换成布尔值
    Boolean():可将其他类型转为布尔值。
    !!其他类型:快速转换成布尔值

    转换规则
    数字0——false;其他值为——true
    字符串:空字符串——false;非空字符串——true
    对象:所有对象——true;
    null——false;undefined——false;NaN——false;
    falsy 是在 Boolean 上下文中认定可转换为false 的值。五个 falsy 值:0,NaN,''(""),null,undefined

    (3)转换成数值
    parseInt(字符串,进制):字符串转换成整数型;
    parseFloat():字符串转换成浮点型;只有十进制有浮点型;
    Number():可以将任意类型的值转换成数值;转换结构,0,1,NaN;
    规则:Number() 函数将不可以被解析为数值的字符串转为NaN,将空字符串转为0。
    -"0" 或 0+ :都等于这个数本身的数值

    (4)json转换
    JSON.parse(str):字符串转json
    JSON.stringfy():json转字符串
    利用json与字符串之间的转换,可以实现深浅拷贝;

    (5)常用的组数与字符串的转换
    join("转换字符"):将数组中转换成字符串,并用指定的分隔符进行分割;
    split("分隔符"):将字符串以指定的分隔符分割成数组

    隐私数据转换,+ - * /;if()判断语句;

    js变量内存分布
    变量值如果是基本类型,它也存储在栈中;
    如果变量值是引用类型,他存储在堆空间中,栈空间存储的是相应的地址。


    js变量内存.png

    js深浅拷贝
    (1)深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
    (2)浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

    深拷贝方法
    1.JSON.parse()与JSON.stringify()
    const clone=function(obj){
    return JSON.parse(JSON.stringify(obj))
    }
    注:这种方法虽然可以实现数组或对象深拷贝,但不能处理函数。

    2.es6展开符
    var arr1=[1,2,5,6,4];
    var arr2=[...arr1];
    arr1 == arr2 // false;

    3。递归函数,遍历对象,直到对象说有的为基本数据类型;
    var clone = function (obj) {
    if (obj === null) return null
    if (typeof obj !== 'object') return obj;
    if (obj.constructor === Date) return new Date(obj);
    if (obj.constructor === RegExp) return new RegExp(obj);
    var newObj = new obj.constructor();? //保持继承链
    for (var key in obj) {
    if (obj.hasOwnProperty(key)) {? //不遍历其原型链上的属性
    var val = obj[key];
    newObj[key] = typeof val === 'object' ? arguments.callee(val) : val;
    // 使用arguments.callee解除与函数名的耦合
    }
    }
    return newObj;
    };

    4、函数库lodash
    该函数库也有提供 _.cloneDeep 用来做 Deep Copy。
    var _ = require('lodash');
    var obj1 = { a: 1, b: { f: { g: 1 } }, c: [1, 2, 3]};
    var obj2 = _.cloneDeep(obj1);
    console.log(obj1.b.f === obj2.b.f);
    // false

    相关文章

      网友评论

          本文标题:js数据数据类型及常用检查,转换方法

          本文链接:https://www.haomeiwen.com/subject/eknbnctx.html