ES6基础
2020-04-29 15:54:45 11 举报
AI智能生成
个人前端学习
作者其他创作
大纲/内容
let
变量声明
1.使用var或者直接使用的变量名定义声明的变量(污染全局对象)变量声明后,即挂在了全局对象window上,作为其属性和方法,通常也可以省略window对象直接调用;当我们访问不存在的变量时,即会自动创建一个变量,详见本章笔记附录:
2、var与let的主要区别:— —let声明变量 只在当前块级作用域有效(即{}),不会污染全局对象window;— —let或者const声明变量,不能被重复声明;— —let不存在变量提升(使用变量前,必须先声明;如果是使用var,会有一个预解析的状态,使变量被赋值为undefined,且使所有的var 和function声明的变量和函数提至最前面)变量提升:在变量声明前,调用变量,会将变量提升到调用语句前,仍会读到该变量。
const
声明常量
const 声明常量1.常量必须在声明的时候赋值,否则报错2.常量不能被修改, 但是!!为引用类型的时候,可被修改,const只能保证指向的引用地址不变,但是地址中的内容是可以改变的,比如xiaoming.age = 22
与let类似的特性:不能重复声明;不存在提升;只在当前(快级)作用域内有效常量为引用类型的时候不能保证不可变
const 声明常量时,只能保证常量所指向的地址不变(eg:18、23同地址,25与18、23不同地址),但不能保证地址上的值(23改变的只是18内的值)不去发生改变。类似的还有数组,改变其中的值谋问忒,但改变地址(eg:被赋予新数组)就有问题。
常量内引用Object.freeze()可保证引用类型不被修改;
const扩展
1.Object.defineProperty(对象名,属性名,{value:属性值 }):可添加、修改属性值,也可扩展属性;对象名:必须,被添加或者修改属性的对象。属性名:必须,被修改的属性名称{value:属性值 }:必须,属性描述符,它可以针对数据属性或访问器属性返回值:已修改的对象。用法:向对象添加新属性。修改现有的属性特征
2.Object.seal(对象名):让一个对象密封,密封对象不能添加新的属性,不能删除已有的属性,以及不能修改已有属性的可枚举性、可配置性,可写性,但是可以修改已有属性对象的值。返回值:被密封后的对线
3.Object.hasOwnProperty(属性名):检测是否是自己定义的属性,属性名:必须返回值:是则返回true,不是则返回false
ES6扩展
ES6基础:ECMAScript与JavaScript关系1.ES是JS语言标准或规范2.JS是基于ES语言标准或规范的一种客户端脚本实现
自执行函数原理阐释
(一)基本语法格式( function (formal arguments){ } ) (actual arguments)
三)我们为什么需要使用自执行函数?充分发挥自执行函数提供的密闭空间作用域的优势— —避免污染变量内存,即全局变量window(浏览器端);— —构建密闭作用域(如老师的代码)
作用域
//ES6之前版本1.全局作用域(window);2.函数作用域3.eval作用域(即是指:eval函数的() 包含的部分)
//ES64.块级作用域(即使用 {...} 包含的代码区域)— —if(){...};— —switch(){...};— —for(){...};包含了两级作用域,()内是一个作用域,{}是其子作用域— —try(){...}catch(err){...};— —{...}tips:支持嵌套块级作用域;除对象的{}外;5.暂存死区:只要在块级作用域中,使用let或const关键字声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
解构赋值
数组的结构赋值
对象的解构赋值
1.数组与对象区别数组有序,根据下标取值;对象是无序的,结构赋值时,变量名和对象的属性名相同,就可以匹配,取到对象中属性的属性值;
2.无需保留前项位置,即使用逗号;
3.赋值对象匹配---如图当对象为中其中一个属性为数组时,则需按照数组方式来解析结构,另当前者为数组的同时,里面的数组项为对象时,获取相同的属性名,则不能写相同的属性名(const 申明的变量名不能重名)---------用:隔开,只可前者属性名相同,同时将属性值赋予;后者则是需要属性名:属性值(变量名称),是将其属性名的属性值赋予变量*****对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量,
要拿某个属性只要构造相同的数据结构就行,属性重名时可以在属性后加个:,形成A:B,表示拿A的属性但是复制给B
字符串的解构赋值
1.通过数组形式来匹配字符串;
2.扩展运算符......oth 是将剩下的字符串的字母以数组的形式全部拆分为25个字母,而非单词;
3.图中的三种方式都是如第2点所诉,以数组的形式全部拆分为单独字母,而非单词;
数值与布尔值的解构赋值
1.当str(字符串).length时,是将字符串临时包装成对象获取,获取完后,又重新返回str;
函数参数的解构赋值
0 条评论
回复 删除
下一页