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

 function BigUser() {

   this.name = "John";

   return { name: "Godzilla" };  // <-- returns 一个 object
} alert( new BigUser().name ); // 哇哦,得到了对象,name 属性值为 Godzilla ^^

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

 function SmallUser() {

   this.name = "John";

   return; // 完成执行,returns this

   // ...

 }

 alert( new SmallUser().name );  // John

  构造函数中的方法

  

 function User(name) {
this.name = name; this.sayHi = function() {
alert( "My name is: " + this.name );
};
} let john = new User("John"); john.sayHi(); // My name is: John /*
john = {
name: "John",
sayHi: function() { ... }
}
*/

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. golang 时间转换的问题

    一般在获取到时间字符串,需要将时间字符串格式化为golang的"time.Time"对象的时候,通常有2个函数,分别是. time.Parse(layout, value stri ...

  2. spark streaming 接收kafka消息之五 -- spark streaming 和 kafka 的对接总结

    Spark streaming 和kafka 处理确保消息不丢失的总结 接入kafka 我们前面的1到4 都在说 spark streaming 接入 kafka 消息的事情.讲了两种接入方式,以及s ...

  3. MyBatis 文档 完整版

    框架技术 1.框架技术 01.是一个应用程序的半成品 02.提供可重用的公共结构 03.按一定规则组织的一组组件 2.分析优势 01.不用再考虑公共问题 02.专心的业务实现上 03.结构统一,易于学 ...

  4. http.client.ResponseNotReady: Request-sent

    最近学习python写接口测试,使用的是connection.request 发现在测试一个发送报告接口时候,同一个接口,同样的脚本,只是一个参数传不同值,总提示:http.client.Respon ...

  5. PHP 防范xss攻击(转载)

    XSS 全称为 Cross Site Scripting,用户在表单中有意或无意输入一些恶意字符,从而破坏页面的表现! 看看常见的恶意字符XSS 输入: 1.XSS 输入通常包含 JavaScript ...

  6. Flink状态专题:keyed state和Operator state

            众所周知,flink是有状态的计算.所以学习flink不可不知状态.         正好最近公司有个需求,要用到flink的状态计算,需求是这样的,收集数据库新增的数据.       ...

  7. 雪花算法【分布式ID问题】【刘新宇】

    分布式ID 1 方案选择 UUID UUID是通用唯一识别码(Universally Unique Identifier)的缩写,开放软件基金会(OSF)规范定义了包括网卡MAC地址.时间戳.名字空间 ...

  8. JDK的可视化工具系列 (四) JConsole、VisualVM

    JConsole: Java监视与管理控制台 代码清单1: import java.util.*; public class JConsoleDemo { static class OOMObject ...

  9. CentOS系统故障 | 一桩"血案"引发的容器存储驱动比较

    写在前面: 由于红帽在Linux界的影响力,相信很多朋友在测试和生产系统用的是RedHat或者CentOS系统,这次我在CentOS系统上遇到了一个很有意思的故障,通过这次故障的原因分析及解决,特意写 ...

  10. prometheus-kafka-exporter部署

    chart地址:https://gkarthiks.github.io/helm-charts/charts/prometheus-kafka-exporter/ 1.下载chart $ helm r ...