JS基础数据类型及判断

js基础(弱类型语言—>不必事先声明数据类型)

js数据类型

  1. 基础类型:number、string、boolean、null、undefined、symbol、bigInt(基础数据类型无原型)
  2. 引用数据类型: object包含object、array、function、date

数据类型判方法:

1、typeof判断
  • 可判断出除null(null判断为object)外的基础类型(包含:String、Number、Boolean、undefined、symbol、bigint)
  • 对非基本类型只可判断出function,其他(new Date、Array、null、{}、[]、)都是object
  • 用法: typeof a
    JS基础数据类型及判断_第1张图片
2、instanceof判断

语法:object instanceof constructor
原理:instanceof 运算符用于测试构造函数(constructor)的 prototype 属性是否存在于实例对象(object)的原型链上,如存在,则返回 true。

  • (不适用于基础数据类型,因为基础数据类型没有构造器,存储在栈中)
  • instanceof运算符会沿着对象的原型链向上查找,直到找到构造函数的原型或者到达原型链的末端
// 手写instanceof
function myInstanceof(obj,constructor){
	// Obejct.getPrototypeOf作用:获取指定对象的原型(内部​​[[Prototype]]​​属性的值),如果没有继承属性,则返回 null 
    let proto = Obejct.getPrototypeOf(obj);
    while(proto !== null){
        if(proto === constructor.prototype){
            return true;
        }
        proto = Object.getPrototypeOf(proto);
    }
    return false;
}

用法可参考:https://blog.csdn.net/neweastsun/article/details/72047406
JS基础数据类型及判断_第2张图片

题外话: Object.setPrototypeOf():为现有对象设置原型,返回一个新对象;
接收两个参数:第一个是现有对象,第二是原型对象。

3、万能判断法:Object.prototype.toString.call()
eg: Object.prototype.toString.call(10) ---> '[object Number]'
4、constructor判断:不稳定,不建议使用,undefined/null使用时会报错

题外话:
防御性编程:即foo.list && foo.list instanceof Array && foo.list.forEach(() =>{…});

隐式转换规则:
1、+ 加其他类型= string
2、+ 两边都是NAN时结果为NAN,undefined转为NAN
3、 NAN为Number类型, —> perferredType—感兴趣可看
4、Infinity + Infinity= infinity(无穷大);
5、infinity + (-infinity)= NaN
6、对象在转换基本类型时,会调用对象上的valueof()或toStrng()方法,该方法的返回值为基本类型的结果,内置函数toPrimitive;

Js的引用与拷贝:
基本数据类型: 占用空间小,大小固定,频繁使用,保存在栈中
引用数据类型:占用空间较大,大小不固定,保存在堆中

Object.assign:
const bar ={a: 1}; const foo = {a:10,b:20};
Object.assign(bar,foo) —-> {a:1, b:20} === bar
返回值为第一个参数,浅层拷贝、值拷贝

深浅拷贝: 拷贝时地址拷贝到哪一层,第一层还是第n层

参考:https://blog.csdn.net/qq_38290251/article/details/133936340

你可能感兴趣的:(学习笔记,javascript,学习笔记)