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:
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 基础知识汇总(五)的更多相关文章
- javaScript 基础知识汇总 (十五)
1.模块简介 什么是模块: 模块就是一个文件,一个脚本,通过关键字export 和 import 交换模块之间的功能. export 关键字表示在当前模块之外可以访问的变量和功能. import 关键 ...
- JavaScript基础知识汇总
1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...
- javaScript 基础知识汇总(三)
1.循环:while 和 for while 循环 while(condition){ //代码 循环体 } do ... while 循环 let i =0; do { //循环体 }while( ...
- javaScript 基础知识汇总(六)
1.基本类型与对象的区别 基本类型:是原始类型的中的一种值. 在JavaScript中有6中基本类型:string number boolean symbol null undefined 对 ...
- javaScript 基础知识汇总(二)
1.运算符 术语或者叫法:一元运算符.二元运算符.运算元(参数) let x=0; x=5+2; //5和2为运算元,“+” 为二元运算符: x=-x; //"-" 为一元运算符 ...
- javascript 基础知识汇总(一)
1.<script> 标签 1) 可以通过<script> 标签将javaScript 代码添加到页面中 (type 和language 属性不是必须的) 2)外部的脚本可以通 ...
- JavaScript 基础知识汇总目录
一.标签.代码结构.现代模式.变量.数据类型.类型转换 GO 二.运算符.值的比较.交互.条件运算符.逻辑运算符 GO 三.循环 while 和 for .switch语句.函数.函数表达式和箭头函数 ...
- javaScript 基础知识汇总 (十三)
1.Class 在JavaScript中 calss即类是一种函数 基本语法 class Myclass{ constructor(){} method1(){} method2(){} method ...
- javaScript 基础知识汇总(七)
1.数组 特点:数组是可以存储有序集合的对象. 声明: let arr = new Array(); let arr=[]; 大多数情况下我们使用第二种. let fruits = [" ...
随机推荐
- python pip安装requests库总提示:Fatal error in launcher...''
1.python pip安装提示:Fatal error in launcher...'' 我查看了网上都说是电脑同时安装了python2 和python3时候才会有这个错误,但实际上我电脑只安 ...
- 【MySQL】java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\xB3' for column
问题原因: 输入内容包含特殊字符,MySQL 中的列不支持. 解决方法 多数是修改 MySQL 的数据库和表结构,CHARSET 改为 utf8mb4,但本人测试还是不能传入 emoji. 后来在代码 ...
- DES、3DES、AES、PBE对称加密算法实现及应用
1.对称加密算法概述 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解读原文 ...
- Kibana对数据的可视化
基于上一篇的操作,我们已经获得了数据,接下来我们就要处理数据,因此选用了Kibana 先来介绍一下, Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索.查看交互存储在E ...
- 不用 Spring Security 可否?试试这个小而美的安全框架
写在前面 在一款应用的整个生命周期,我们都会谈及该应用的数据安全问题.用户的合法性与数据的可见性是数据安全中非常重要的一部分.但是,一方面,不同的应用对于数据的合法性和可见性要求的维度与粒度都有所区别 ...
- Unity实现放大缩小以及相机位置平移实现拖拽效果
放大缩小功能是游戏开发中用到的功能,今天就来讲一下Unity中放大缩小怎么实现. 1.IDragHandler, IBeginDragHandler, IEndDragHandler这三个接口是Uni ...
- 完整原型链详细图解之JS构造函数、原型 原型链、实例化对象
一.首先说一下什么是构造函数: 构造函数:用来在创建对象时初始化对象.特点:构造函数名一般为大写字母开头:与new运算符一起使用来实例化对象. 举例: function Person(){} //Pe ...
- 通过Blazor使用C#开发SPA单页面应用程序(3)
今天我们来看看Blazor开发的一些基本知识. 一.Blazor组件结构 Blazor中组件的基本结构可以分为3个部分,如下所示: //Counter.razor //Directives secti ...
- 面试java后端面经_4
作者:早该变坏链接:https://www.nowcoder.com/discuss/157627来源:牛客网 情话部分: 当有自己心仪的小姐姐,又没确定关系,有时候分享彼此爱情观的时候,你就可以开始 ...
- keras 学习-线性回归
园子里头看到了一些最基础的 keras 入门指导, 用一层网络,可以训练一个简单的线性回归模型. 自己学习了一下,按照教程走下来,结果不尽如人意,下面是具体的过程. 第一步: 生成随机数据,绘出散点图 ...