简单记忆
2023年9月14日...大约 2 分钟
简述
这里是一些有关JS的简单记忆点,记住就行。
简记
var 与 let 区别
- 作用域不同。var 是函数作用域,let 是块作用域。例如,在for循环中定义 var 变量,则只要与该 for 循环存在于同一个函数下,就可以在 for 外访问到 var 定义的变量;而在 for 循环内定义 let 变量,在其外面是不可被访问的。
- let 必须先声明,再使用;而 var 可以先使用后声明,但在还没声明时,其值是 undefined。
- let 不能被重新定义,即无法使用该关键字进行同一变量名的定义; var 可以被重新定义。
如何开启严格模式
// 开启整个JS文件的严格模式
'use strict'
function foo() {
// 在函数内开启严格模式
'use strict'
}
立即执行函数
(function () {
...
})();
eval() 函数
该函数会编译传入的JS语句并执行,如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。可以理解为某种执行函数。
eval的缺点
- 无法优化,性能问题
- 安全问题
- 降低代码压缩率
Object 与 Map 的区别
- 创建方式不同。
let obj = {...}
可通过字面量|构造函数创建/let ergoMap = new Map()
只能通过构造函数创建 - Object 的键只能存储字符串或Symbol,Map的键可以是对象、数组等其他类型
- Object 键值对存储方式无序,Map键值对存储方式有序
基本数据类型
前六种是:undefined
、null
、布尔值(Boolean)
、字符串(String)
、数值(Number)
、对象(Object)
。
以及ES6新加入的 Symbol
。
基本数据类型不适用以new关键字新增
RT
对象中的键
对象的键即使不使用单引号/双引号进行进行包烙,也会被识别为字符串。因此如果需要传入变量。需要用中括号进行包烙。
let user1 = '张三'
let user2 = '李四'
let grade = {
user1: 100,
[user2]: 200
}
console.log(grade) // {user1: 100, 李四: 200}
可以使用位运算符计算替代2的次方乘除法
RT,以下为例子:
let num1 = 7
let multipliedBy2 = num1 * 2; // 原方法,答案为14
let efficientmultipliedBy2 = num1 << 1; // 现方法,答案为14
let divide2 = num1 / 2;
divide2 = Math.floor(divide2) // 原方法,答案为3
let efficientDivide2 = num1 >> 1; // 现方法 (将数字除以二并向下取整),答案为3