zoukankan      html  css  js  c++  java
  • javaScript 基础知识汇总(五)

    1、垃圾回收

      JavaScript 的内存管理是自动的,不能强制执行或者阻止执行

      可达性

      JavaScript中主要的内存管理概念是可达性。

      什么是可达性?

      定义一个对象

      let user = {

        name:"XiaoMing"

      };

      user 应用了这个对象。 通过 user.name 可以取到“XiaoMing"这个值,则认为XiaoMing这个值是可达的。

      当 user= null;  ”XiaoMing“ 这个值就不可达了,此时JavaScript的垃圾回收机制就会自动从内存中将其清除。

    2、Symbol 类型

      对象的属性键,根据规范只能使用 String 类型 和 Symbol 类型

      Symbol  表示唯一的标识符。

      创建方式; let id = new Symbol("id");        Symbol("id")中的id 为对id 的描述,

      并且即使描述相同,只要定义的变量不同,这个Symbol 这个对象就不一样

      字面量中的Symbol

      通过变量的方式将Symbol 对象作为属性的键

       示例:

      let id = Symbol("id");

      let user = {

        name:"XiaoMing",

        [id]:123

      };

      Symbol 在 for...in 中被跳过

      for(let key in user)

        alert(key);

      //Symbol       这个属性不会被展示出来,可以作为隐藏属性

      可以通过"."的方式使用 user.[id]。

      全局symbol

      在应用程序中想要访问同一个symbol 的时候可以使用 全局symbol 注册表

      使用方法:   Symbol.for(key);

      let id = Symbol("id); //从全局注册表中获取,如果不存在则创建。

      let idAgain = Symbol.for("id");  //再次读取

      此时id 和 idAgain是相同的

      Symbol.keyFor

      Symbol.keyFor 在内部全局注册表中来查找symbol 的键,只适用于全局,如果是非全局的则返回undefined

      let sym = Symbol.for("name");

      alert(Symbol.keyFor(Symbol.for(”name")));//name

      alert(Symbol.keyFor(Symbol.for(”id")));//undefined

      系统Symbol 不做展示。

    3、对象方法和 this

      在对象方法中使用this

      let user ={

        name:"XiaoMing",

        sayHi:function(){

          alert(this.name);

        }

      };

      javaScript 中的this 和其它语言中的this 有些不同,JavaScript中的“this” 只有在执行的时候才确定它指向的是哪一个对象。

      简单总结:

      存储在对象中的函数称之为方法

      对象执行方法进行操作,obj.doSomething();

      方法可以将对象应用为this;

      this的值是在运行的时候求值的

      函数声明使用this 只有等到调用时才会有值

      函数可以在对象之间进行公用

      箭头函数没有this。在箭头函数中访问this,是外部传进来的。

    4、构造函数 和操作符“new"

      构造函数

      构造函数在技术上是常规函数。不过有两个约定。

        1)它们的首字母必须大写

        2)只能用”new“ 操作符来执行

      例子:

      function User(name){

        this.name= name;

        this.isAdmin=false;

      }

      let user  = new User('jack');

      alert(user.name);//jack

      双语法构造函数: new.target

      function User(name){

        if(!new.target){

          return new User(name);

        }

        this.name= name;

      }

      let Xiao = User("Xiao");//内部已经封装好了,如果不用new关键字,则在构造函数内部自动使用new

      构造函数 Return

      通常情况下构造函数是没有Return 的

      如果有,规则如下:

        1)如果return 对象,则返回它,而不是this  

        2)如果return 一个原函数,则忽略。

      

      换一种说法,带有对象的 return 返回该对象,在所有其他情况下返回 this

      例如,这里 return 通过返回一个对象覆盖 this

    1 function BigUser() {
    2 
    3   this.name = "John";
    4 
    5   return { name: "Godzilla" };  // <-- returns 一个 object
    6 }
    7 
    8 alert( new BigUser().name );  // 哇哦,得到了对象,name 属性值为 Godzilla ^^

    这里有一个 return 空的例子(或者我们可以在它之后放置一个原函数):

     1 function SmallUser() {
     2 
     3   this.name = "John";
     4 
     5   return; // 完成执行,returns this
     6 
     7   // ...
     8 
     9 }
    10 
    11 alert( new SmallUser().name );  // John

      构造函数中的方法

      

     1 function User(name) {
     2   this.name = name;
     3 
     4   this.sayHi = function() {
     5     alert( "My name is: " + this.name );
     6   };
     7 }
     8 
     9 let john = new User("John");
    10 
    11 john.sayHi(); // My name is: John
    12 
    13 /*
    14 john = {
    15    name: "John",
    16    sayHi: function() { ... }
    17 }
    18 */
  • 相关阅读:
    2018-2019-1 20165228 《信息安全系统设计基础》第八周学习总结
    2018-2019-1 20165227 20165228 20165237 实验三 实时系统
    2018-2019-1 20165228 《信息安全系统设计基础》第七周学习总结
    2018-2019-1 20165227 20165228 20165237 实验二 固件程序设计
    2018-2019-1 20165228 《信息安全系统设计基础》第六周学习总结
    第五周课上测试补做
    2018-2019-1 20165228 《信息安全系统设计基础》第五周学习总结
    ## 2018-2019-1 《信息安全系统设计基础》 20165232 20165231 20165235 实验五 通信协议设计
    2018-2019-1 20165231 20165232 20165235 实验四 外设驱动程序设计
    2018-2019-1 20165232 第九周学习总结
  • 原文地址:https://www.cnblogs.com/xiaoqiyaozou/p/11445351.html
Copyright © 2011-2022 走看看