菁英数字科技(猩码)-猩码学苑-专注软件开发人才菁英教育

标题: 康利20221126JS高级04 [打印本页]

作者: 智商不在服务区    时间: 2022-11-27 19:42
标题: 康利20221126JS高级04
一、学习内容:

        数据类型的分类
                基本类型
                        ES5
                                number,string,undefined,null,Boolean
                        ES6
                                number,string,undefined,null,Boolean,smybol,bigInt
                引用类型
                        ES5
                                object
                        ES6
                                object,array,function
                数据类型的内存分配
                        基本类型
                                保存在栈中
                        引用类型
                                保存在堆中,在栈中存放它的地址(在堆中的地址),指向堆中的数据
                变量的复制
                        1. 基本类型:传递的是值的拷贝
                        2. 引用类型:传递地址的拷贝
                参数的传递
                        1. 基本类型:传递的是值的拷贝
                        2. 引用类型:传递地址的拷贝
        深浅拷贝
                为什么要拷贝:如果是引用类型,两个对象就会共享一份数据,只要修改其中的一个对象,就会对另外一个对象造成影响
                浅拷贝
                        只拷贝一层
                         实现方法一:for...in
const obj1 = {};
for (let key in obj) {
    obj1[key] = obj[key];
}
                        实现方法二:Object.assign();
const obj1 = Object.assign({}, obj);
                深拷贝
                        每一层都拷贝
                        都是固定语法
                        <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
                         const obj1 = JSON.parse(JSON.stringify(obj));
                完美拷贝
                        const obj1 = _.cloneDeep(obj);
        变量的类型检测
                1. typeOf---一般用来检测基本类型
                        console.log(typeof 'abc'); // string
                        console.log(typeof true);  // boolean
                        console.log(typeof 1233);  // number
                        console.log(typeof undefined);  // undefined
                        console.log(typeof null);  // object
                        console.log(typeof Symbol());  // symbol
                        console.log(typeof {});  // object
                        console.log(typeof []);  // object
                        console.log(typeof function () { });  // function
                2. instanceof---主要用于检测引用类型
                        语法:变量(实例对象) instanceof 构造函数
                        变量的原型链上找得到后面的构造函数  就会返回true 否则返回false
                        console.log([] instanceof Object);
                        console.log({} instanceof Object);
                        console.log(new Date() instanceof Object);
                        console.log(function () { } instanceof Object);
                        console.log(10 instanceof Object);  // false
                        console.log(new Number(10) instanceof Object);
                3. Object.prototype.toString();
                        console.log(Object.prototype.toString.call(arr));
                        console.log(Object.prototype.toString.call({}));
                        console.log(Object.prototype.toString.call(function () { }));
                        console.log(Object.prototype.toString.call('123'));
                        console.log(Object.prototype.toString.call(123));
                        console.log(Object.prototype.toString.call(true));
                        console.log(Object.prototype.toString.call(undefined));
                        console.log(Object.prototype.toString.call(null));
                        console.log(Object.prototype.toString.call(Symbol()));
        继承
                ES5继承:寄生组合式继承
                        // 父类  人类
function Person(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
}
                        // 原型方法---共享方法
Person.prototype.eat = function () {
    return '干饭';
}
Person.prototype.way = function () {
    return '走路';
                        // 静态方法:只能构造函数自己调用,实例对象不可以调用
Person.say = function () {
    return '说话';
}
                        // 子类  程序员类
function Programmer(name, age, sex, skill) {
    // 1.调用父类构造函数的属性
    Person.call(this, name, age, sex);
    this.skill = skill;
}
                        // 2.调用父类所有的原型方法
Programmer.prototype = Object.create(Person.prototype);
                        // 3.找回子类原型丢失的构造函数
Programmer.prototype.constructor = Programmer;
                        // 子类构造函数的原型方法
Programmer.prototype.code = function () {
    return '一天一万行';
}
Programmer.say = Person.say;
                        // 创建子类的实例对象
const p = new Programmer('kl', 23, '2', '99999');
console.log('程序员子类的实例对象', p);






欢迎光临 菁英数字科技(猩码)-猩码学苑-专注软件开发人才菁英教育 (http://www.xingmaxueyuan.com/) Powered by Discuz! X3.4