• 基础知识 js


    Object没有prototype属性

     

    __proto__

    prototype

    Object

    Function

    几种Object方法的小结:

    Object方法

    返回值

    涉及属性

    说明

    Object.entries()

    数组

    自有&&可枚举

    数组元素是属性名称-属性值

    Object.keys()

    数组

    自有&&可枚举

    数组元素是属性名称

    Object.values()

    数组

    自有&&可枚举

    数组元素是属性值

    Object.getOwnPropertyNames()

    数组

    自有&&(可枚举+不可枚举)

    数组元素是属性名称

    for-in

    数组

    (自有+原型链)&&可枚举

    数组元素是属性名称

     

    问题

    函数表达式有什么用?

    解答

    唯一的用处是附加为已有组件/Object的方法

    获取函数名称

    function test6 (){

      console.log(arguments.callee.name);

    }

     

    test6();

    浅拷贝和深拷贝

    浅拷贝:假如源对象的属性值是一个对象的引用,拷贝之后的目标对象值也只能是引用,指向原来对象。

    类似于:js 中的引用类似于C++中的指针,复制引用类型的属性值,如同复制指针类型的属性值。复制之后,新生成了一个指针,但指针值不变,仍然指向原有对象。

    浅拷贝例子
     1 let obj1 = { a: 0 , b: { c: 0}}; 
     2 let obj2 = Object.assign({}, obj1); 
     3 console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} 
     4 
     5 obj1.a = 1; 
     6 console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} 
     7 console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} 
     8 
     9 obj2.a = 2; 
    10 console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} 
    11 console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
    12  
    13 obj2.b.c = 3; 
    14 console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}} 
    15 console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}} 
     
    深拷贝:生成一个全新对象,相关的引用与源对象无任何关系,完全独立于源对象,占用单独的内存空间
    1 obj1 = { a: 0 , b: { c: 0}}; 
    2 
    3 // 生成一个完全彻底的新对象
    4 let obj3 = JSON.parse(JSON.stringify(obj1)); 
    5 obj1.a = 4; 
    6 obj1.b.c = 4; 
    7 console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
     
    ES6 - const

    const 实际上保证的是不是变量的值不得改动,而是变量指向的内存地址不得改动。

    对于简单数据类型(数值,字符串,布尔值),值就保存在指向的内存地址等同于常量。

    对于复合类型的数据(对象和数组)变量指向的内存地址只是一个指针,只能保证指针是不变的,不保证指针指向的内容是不变的.

    ES6 - 解构

    参考此处:ES6非常棒的特性-解构

    基本描述

    解构的目的是简化变量的获取和使用,减少程序代码的书写量。

    解构就是从字符串、数组或者object中提取一个或一些元素的值并存入相对更简单的变量中。

    要点1:解构的数据来源是能够存放多个元素的对象,例如字符串存放多个字符,数组存放多个元素,object存放多个属性。

    要点2:解构的数据目的变量一定比解构源更简单。

    解构带上默认值

    如果我们要解构的对象的属性没有值,甚至属性不存在。这个时候,我们需要一个默认值,通常我们可能会这么写:

    let name = person.name || "default name";

    语言特点

     

    C++是一门让人越来越来清晰的语言,C++是一门清晰的语言

    js是一门让人越来越来糊涂的语言,js是一门稀里糊涂的语言

    相关疑问

    js 为何需要不可枚举属性?

    js 在何处只能用函数表达式,无法用函数声明

    参考资料:https://www.jianshu.com/p/baa5c408b3a6

  • 相关阅读:
    Nodejs----基本数据类型
    VUE----整理
    Linux----知识储备
    Linux----常用操作
    GIT-常用操作
    CAS 4.0 配置开发手册(转)
    cas配置全攻略(转)
    cas sso入门(转)
    cas sso原理(转)
    spring web flow 2.0入门(转)
  • 原文地址:https://www.cnblogs.com/micemik/p/12324713.html
Copyright © 2020-2023  润新知