js核心由三部分组成
- ECMAScript:由ECMA-262 定义并提供核心功能。
- 文档对象模型(DOM):提供与网页内容交互的方法和接口。
- 浏览器对象模型(BOM):提供与浏览器交互的方法和接口。
基础语法
1.声明对象的方式(var\let\const)
var在全局作用域中声明会挂到window对象上
let存在局部作用域
const 声明的限制只适用于它指向的变量的引用。换句话说,如果 const 变量引用的是一个对象, 那么修改这个对象内部的属性并不违反 const 的限制。
暂时性死区
在解析代码时,JavaScript 引擎也会注意出现在块后面的 let 声明,只不过在此之前不能以任何方 式来引用未声明的变量。在 let 声明之前的执行瞬间被称为“暂时性死区”(temporal dead zone),在此 阶段引用任何后面才声明的变量都会抛出 ReferenceError。
ES6
1.解构语法
解构的原理+解构值对之前值的影响(可迭代对象)解构是ES6提供的语法糖,其实内在是针对可迭代对象的Iterator接口,通过遍历器按顺序获取对应的值进行赋值。 完全解构与不完全解构
const student = {
name: "jsPool",
age: 20,
country: china,
sexual: 'male',
scores: {
math: 95,
chinese: 98,
english: 93,
},
};
let { name, scores } = student;
console.log(name, scores);
scores.math = 100;
console.log(name, scores, student.scores);
//解构执行的是浅复制,引用类型解构后值的变化会影响原本的值,是一种更便捷的数据访问机制,避免进行修改,需要进行修改时就需要进行彻底的解构scores:{ math = 0,chinese = 0, english = 0}
jsPool { math: 95, chinese: 98, english: 93 }
jsPool { math: 100, chinese: 98, english: 93 } { math: 100, chinese: 98, english: 93 }
对象解构(属性名)
在解构对象时,是以属性的名称为匹配条件,来提取想要的数据的。对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值,如果没有此变量名则为 undefined。
//同名解构
const { name, country } = person;
//非同名解构
const { name: fullname, country: place } = person;
//解构时赋默认值
let { age = 20, sexual: sex = 'male' } = person;
//嵌套解构
const { name, scores: { math = 0, chinese = 0, english = 0 } } = person;
数组解构(顺序)
//使用占位进行解构
let list = [221,'Baker Street','London'];
let [houseNo,,city] = list;
console.log(houseNo,city);// 221 , London
//解构语法的应用
// 数组合并
let a = [1, 2, 3];let b = [4, 5, 6];let [...c] = [...a, ...b];// c = [1, 2, 3, 4, 5, 6]
// 类数组转数组
let arr = [...arrLike]
// 交换变量的值
let a = 1;let b = 2;[b, a] = [a, b];
2.展开语法
对象的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。
使用展开语法时遇到同名属性时会发生属性的覆盖(覆盖规则为后面添加的会覆盖之前的内容)
但是它们的成员都是对原数组成员的引用,这就是浅拷贝。如果修改了引用指向的值,会同步反映到新数组。
复制数组/合并数组