美文网首页
2019-10-10

2019-10-10

作者: 五更月下琉璃 | 来源:发表于2019-10-11 12:10 被阅读0次

let和const

let声明的变量只在let命令所在的代码块生效
在声明之前使用会报错,而var则显示undefined。
在语法上称之为“暂时性死区”
我个人理解是当某个变量只在一个代码块内使用时用let比较方便,不会影响到其他地方,也不会有局部变量上升到全局变量的情况出现;也像我们规范中要求写成的let usedData = res;这样的;

function f(){
let x = 5
if (true) {
let n = 10;
}
console.log(n);
n输出为5,不会受if里面的影响;
}

es6允许块级作用域嵌套,每一层都是独立的,不会相互影响;不同层次可以使用相同的变量名。使用前必须有{},否则不存在块级作用域。

const声明一个只读常量,一旦声明后不能改变常量的值,否则报错;

const xxx = 1024
xxx //1024

只声明不赋值也会报错;

const xxx  //报错

const的作用域与let相同;只在声明所在的块级作用域内生效,也不能重复声明

const func = {}
func.prop = 123;//为func添加一个属性,可以成功。
//将func指向一个对象,会报错。
func = {};

变量赋值

允许写成

let [a,b,c] = [1,2,3];

本质上这种写法叫匹配模式;只要等号两边模式相同,左边的变量就会赋上对应的值
还有一种不完全结构的方式

let [x,y] = [1,2,3]
//输出为x=1,y=2,

Set结构也可以使用数组的解构赋值

let [x,y,z] = new Set(['a', 'b', 'c']);

对象的解构赋值实际上是下面形式的简写

let {fox: answer} = { fox: "111",bar: "222"}
//最后输出answer=111,而fox=undefined

指定默认值

var {x:y=3} = {};
//输出y=3
var {x: y=3} = {x: 5};
//输出y=5

默认值生效的条件是对象属性值严格等于 undefined
嵌套赋值

let obj = {}
let arr = []
({ foo: obj.prop, bar: arr[0] } = { foo: 123, bar : true})
obj //{prop:123}
arr //[true]
//在嵌套对象中子对象的父属性不存在,那将报错。
let {foo: {bar}} = {baz: 'baz'};

模板字符串

模板字符串是增强版的字符串,用反引号 `` 标识。可以当作普通字符串使用;也可以用来定义多行字符串,或者在字符串中嵌入变量。
在表示多行字符串的时候,所有的空格和缩进都保留在输出中;可以使用trim方法消除。

`xxxxxx`.trim()

需要嵌套变量的时候。将变量写在&{}中;
可以进行运算,引用对象属性。

let x = 1
let y = 2
`${x} + ${y} = ${x+y}`
//"1+2=3"
`${x} + ${y*2} = ${x+y*2}`
//"1+4=5"
let obj = {x:1,y:2};
`${obj.x+obj.y}`
//"3"

模板字符串中可以调用函数

function fn() {
  return "hello world";
}
`foo ${fn()} bar`
//foo hello world bar

标签模板

alert`123`
等于
alert(123)

相关文章

网友评论

      本文标题:2019-10-10

      本文链接:https://www.haomeiwen.com/subject/kdiapctx.html