JS基础

js基本数据类型

JS数据类型:JS的基本类型和引用类型.
基本类型:String、Number、boolean、null、undefined
引用类型:object.里面包含的 function、Array、Date

用typeof检测基本数据类型返回的分别是什么?
{ } 、[ ] 输出 object
检测String返回string 字符串
检测Number返回Number 数据类型
检测Boolean返回Boolean 布尔值
检测Undefined返回undefined 没有初始化、定义的值
检测Null返回Object 不存在的对象
NaN返回Number Number 中的特殊数值
Object返回function

值类型和引用类型的区别
值类型:占用空间固定,保存在栈中
引用类型:占用空间不固定,保存在堆中

深拷贝

概念:深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝

深拷贝可以用递归来实现

   let arr = [100, [12, {
        a: 'hello',
        b: 'vue'
    }], {
        c: [11, 12]
    }]

    function copy(obj) {
        // 首先判断obj如果不是对象或者为null让它直接返回
        if (typeof obj !== 'object' || obj == null) {
            return obj
        }
        // 判断这个对象是否存在Array的原型链上,如果存在就在newArr添加一个空数组否则添加一个空对象
        let newArr = obj instanceof Array ? [] : {}
        // 循环它里边的每一项
        for (var i in obj) {
            // 判断是它自身存在的属性
            if (obj.hasOwnProperty(i)) {
                // 对它里边的每一项再次进行判断
                newArr[i] = copy(obj[i])
            }
        }
        return newArr
    }
    let arr2 = copy(arr)
    console.log(arr)  //a = holle
    arr[1][1].a = 'happy'
    arr[2].c[1] = 89
    console.log(arr2) //a = happy
    

变量计算和类型转换

使用加号运算符实现字符串拼接

var s1 = 123 , s2 = "def";
console.log(s1 + s2);  //返回 123def
console.log(10+'10'); // 1010

== 和 === 有什么区别

== 表示相同
比较的是物理地址,相当于比较两个对象的 hashCode ,肯定不相等的类型不同,值也可能相等

=== 表示严格相同
简单理解就是 == 就是先比较数据类型是否一样。=== 类型不同直接就是 false

原型和原型链

原型的概念
我们创建的每一个函数,都有一个prototype属性,这个属性对应着一个对象就是原型对象,如果函数以构造函数
的形式调用时,他所创建的对象中都有一个__proto__属性这个属性就是原型

原型链的概念
当一个对象调用自身不存在的属性和方法,会去自己[proto]关联父级元素中的原型中查找,如果没找到就会去父级的父级原型去查找,直到找到属性或方法或者undifind才停止

在这里插入图片描述

class 类

ES5中的类
ES5中如果要生成一个对象实例,需要先定义一个构造函数,然后通过new操作符来完成
实例:
在这里插入图片描述

ES6中的类
ES6引入了class(类)这个概念,通过class关键字可以定义类该关键字的出现使得javascript在对象写法上更加清晰,更像是一种面向对象的语言。
实例:

在这里插入图片描述

注意项:
1.在类中声明方法的时候,千万不要给该方法加上function关键字
2.方法之间不要用逗号分隔,否则会报错由上面代码可以看出类实质上就是一个函数。类自身指向的就是构造函数 所以可以认为ES6中的类其实就是构造函数的另外一种写法!在这里插入图片描述
constructor方法是类的构造函数的默认方法,通过new命令生成对象实例时,自动调用该方法
在这里插入图片描述

constructor中定义的属性可以称为实例属性(即定义在this对象上),constructor外声明的属性都是定义在原型上的,可以称为原型属性(定义在class上)。
hasOwnProperty()函数用于判断属性是否是实例属性。其结果是一个布尔值, true说明是实例属性,false说明不是实例属性。
in操作符会在通过对象能够访问给定属性时返回true,无论该属性存在于实例中还是原型中。
在这里插入图片描述

class不存在变量提升,所以需要先定义再使用。因为ES6不会把类的声明提升到代码头部,但是ES5就不一样,ES5存在变量提升,可以先使用,然后再定义
在这里插入图片描述

class继承

在这里插入图片描述

instanceof

instanceof判断一个引用类型变量所指向的对象是否是一个类的实例,即它左边的对象是否是它右边的类的实例,该运算符返回boolean类型的数据

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值