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. */

javaScript 基础知识汇总(五)的更多相关文章

  1. javaScript 基础知识汇总 (十五)

    1.模块简介 什么是模块: 模块就是一个文件,一个脚本,通过关键字export 和 import 交换模块之间的功能. export 关键字表示在当前模块之外可以访问的变量和功能. import 关键 ...

  2. JavaScript基础知识汇总

    1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...

  3. javaScript 基础知识汇总(三)

    1.循环:while 和 for while 循环 while(condition){ //代码 循环体 } do ... while  循环 let i =0; do { //循环体 }while( ...

  4. javaScript 基础知识汇总(六)

    1.基本类型与对象的区别 基本类型:是原始类型的中的一种值. 在JavaScript中有6中基本类型:string number  boolean  symbol  null  undefined 对 ...

  5. javaScript 基础知识汇总(二)

    1.运算符 术语或者叫法:一元运算符.二元运算符.运算元(参数) let x=0; x=5+2; //5和2为运算元,“+” 为二元运算符: x=-x; //"-" 为一元运算符 ...

  6. javascript 基础知识汇总(一)

    1.<script> 标签 1) 可以通过<script> 标签将javaScript 代码添加到页面中 (type 和language 属性不是必须的) 2)外部的脚本可以通 ...

  7. JavaScript 基础知识汇总目录

    一.标签.代码结构.现代模式.变量.数据类型.类型转换 GO 二.运算符.值的比较.交互.条件运算符.逻辑运算符 GO 三.循环 while 和 for .switch语句.函数.函数表达式和箭头函数 ...

  8. javaScript 基础知识汇总 (十三)

    1.Class 在JavaScript中 calss即类是一种函数 基本语法 class Myclass{ constructor(){} method1(){} method2(){} method ...

  9. javaScript 基础知识汇总(七)

    1.数组 特点:数组是可以存储有序集合的对象. 声明: let arr = new Array();   let arr=[]; 大多数情况下我们使用第二种. let fruits = [" ...

随机推荐

  1. Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))

    传送门 •题意 给出两个正整数 a,b: 求解 k ,使得 LCM(a+k,b+k) 最小,如果有多个 k 使得 LCM() 最小,输出最小的k: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...

  2. Linux 文件系统相关的基本概念

    本文介绍 Linux 文件系统相关的基本概念. 硬盘的物理组成 盘片硬盘其实是由单个或多个圆形的盘片组成的,按照盘片能够容纳的数据量,分为单盘(一个硬盘里面只有一个盘片)或多盘(一个硬盘里面有多个盘片 ...

  3. 一道看似简单的go程序的深入分析

    先上代码: func main() { var a [10]int for i := 0; i < 10; i++ { go func(i int) { for { a[i]++ } }(i) ...

  4. abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十二)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  5. 想成为顶尖 Java 程序员?请先过了下面这些技术问题。

    一.数据结构与算法基础 说一下几种常见的排序算法和分别的复杂度. 用Java写一个冒泡排序算法 描述一下链式存储结构. 如何遍历一棵二叉树? 倒排一个LinkedList. 用Java写一个递归遍历目 ...

  6. JNDI----数据连接池

    JNDI:提供了查找和访问各种命名和目录服务的通用,统一的接口 常用的配置属性:   name:表示以后要查找的名称.通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是 ...

  7. 使用 RxJava 进行嵌套串行网络请求的一种方法

    需求 有这样一个列表数据,它包含了商店+订单的信息,获取订单列表时,订单实体中会包含商店的 ID,而列表显示时需要商店的名称和 logo,这时候就需要进行嵌套串行网络请求了. 关键词 flatMap ...

  8. Mybatis学习笔记之---动态sql中标签的使用

    动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...

  9. 心里想的VS嘴上说的

    心里想的VS嘴上说的 背景:昨天开会,在招行总行那边,今天检讨下自己不会说话,真是太难了我! 一.昨日重现 现在回想起当时的场景觉得自己也真是搞笑,这都没死,太难了我.昨天下午在五楼开会,这也是我入职 ...

  10. golang常用的http请求操作

    之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的 ...