JS的基本数据类型详解

js的七种类型  

四基两空一对象

数字类型,字符串类型,布尔类型,null,undefined,symbol,Bigint

问题: NaN是什么

答:NaN表示无法表示出的数字,是Number类型 typeof NaN : number NaN == NaN是false,因为NaN不于任何值相等

关于布尔类型中的隐式转换:

        falsy值 falsy值共有五个:

undefined

NaN

null

0

""(空字符串)

关于undefined和null的区别

         1. undefined == null true undefined === null false 原因是值都是空值,但类型不同,typeof undefined输出undefined,但typeof null输出object

2.undefined表示一个变量没有被声明,或者被声明了但没有被赋值(未初始化), 一个没有传入实参的形参变量的值为undefined,如果一个函数什么都不返回,则该函数默认返回undefined null表示空值,即什么都没有

3.undefined不是一个有效的JSON,但null是 4.undefined和null在转换为原始类型时,null在算术中转换为0,undefined不做转换 复杂类型(引用类型)Object 数组,对象,函数 使用typeof,数组和对象都会返回object,函数返回function

用来区分数组和对象的方法:

1.intanceof let a = {}; console.log(o intanceof Object) // ture

2.Object.portotype.toString.call()

let a = 4;

let b = function () {};

let c = [];

let d = null;

console.log(Object.prototype.toString.call(a));

console.log(Object.prototype.toString.call(b));

console.log(Object.prototype.toString.call(c));

console.log(Object.prototype.toString.call(d));

// [object Number]

// [object Function]

// [object Array]

// [object Null]

然后写个方法来截取一下

function judge(type) {

var string = Object.prototype.toString.call(type);

return string.substr(8, string.length - 9)

}

复杂类型存储在堆内存中,基本类型存储在栈内存中,JS中规定栈内存中可以直接取值, 堆内存中只能用地址来取值,所以深拷贝,浅拷贝只存在复杂类型中

深拷贝和浅拷贝 深拷贝的方法:

1.JSON.parse(JSON.stringify(data))

2.Object.assign({}, data)

3.递归实现深拷贝

// 深拷贝

function cloneDeep(obj) {

// 3.根据obj为对象或者数组,产生一个空的对象或数组,存放数据

var newobj = obj instanceof Array ? [] : {};

// 1.for...in进入循环 for (var k in obj) {

// 2.判断对象的第一个属性是否为数组或者对象,如果是,则进入递归

// if (obj[k] instanceof Array) {

// newobj[k] = cloneDeep(obj[k])

// } else if (obj[k] instanceof Object) {

// newobj[k] = cloneDeep(obj[k])

// }

// 4.上面两个执行逻辑一样,进行合并

if (typeof obj[k] === 'object') { newobj[k] = cloneDeep(obj[k]) } else {

// 5.如果数据为基本类型,则直接赋值

newobj[k] = obj[k] } }

// 6.把存放了数据的新对象返回出去

return newobj

}

补充:typeof能返回的值有六种:undefined,string,number,boolean,function,symbol

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值