Vue使用Element UI控制台报错
[Violation] Added non-passive event listener to a scroll-blocking 'touchmove' event.
解决:
1、npm i default-passive-events -S
2、main.js中加入:import 'default-passive-events'
[Violation] Added non-passive event listener to a scroll-blocking 'touchmove' event.
解决:
1、npm i default-passive-events -S
2、main.js中加入:import 'default-passive-events'
location /
  {
  try_files $uri $uri/ /index.html?$args;
  }
let声明的变量, 有块级作用域,只能在大括号{}里使用
好处: 避免全局变量污染
// 块级作用域
// 在大括号内, 用let声明的变量, 只能在大括号内使用
if (true) {
    let myName = "Liao"
    console.log(myName) //Liao
}
 console.log(myName) //myName is not defined
let必须先定义再使用, 不然就会报错
  console.log(a) // 报错
  let a = 10
let同一个作用域下, 不能重复声明同一个名字的变量
let a = 10
let a = 10 // 报错
避免污染window原有的全局变量
作用: 声明常量
必须赋予初始值, 且无法修改
let相同const声明的变量, 如果存复杂类型, 存的是对象/数组的内存地址
只要地址不改变, 可以修改指向的对象或者数组的内容
const obj = {
  name: 'Liao',
  age: 18
}
// obj = {} // 报错,常量不能修改
obj.name = 'lll' // 正确
var没有块级作用域, 容易造成变量污染
全局的var会被自动挂载到 window 上, 污染 window 的变量(这不合理!)
var a = 10
console.log(window.a) //10
var存在变量声明提升, 先使用后定义不报错! 会打印 undefined(这不合理!)
console.log(a) // undefined
var a = 10
var就算同一个作用域下, 重复声明了相同的变量名, 也不报错(这不合理!)
var a = 10
var a = 20
var会污染 window 的变量作用: 简化匿名函数, 简化回调函数和普通函数的写法
语法: () => {}, 小括号内书写形参, 大括号内写函数体
let fn = (msg) => {
  console.log('Hello' + msg)
}
//上例中的箭头函数可简化
let fn = msg => console.log('Hello' + msg)
fn('World!')
注:方法体只有一行代码,且省略了大括号,如果函数有return,则也省略。
也就是箭头函数只有一句代码并且省略大括号时,默认带有
return,再写return则会报错。
let fn = (a,b) => {
	return a + b
}
//可简化成
let fn = (a,b) => a + b
箭头函数的this指向的是外层作用域this的值
let myObj = {
  a: function () {
    console.log(this)
  },
  b: () => {
    console.log(this)
  }
}
myObj.a() // myObj
myObj.b() // window
new配合使用arguments为了接收所有参数
普通函数可以通过
arguments获取全部参数,箭头函数没有arguments
用于函数形参,必须放在形参最后一个!
argumentsfunction youSum (a, ...args) {
  console.log(a, args)
}
youSum(5, 10) //5 [10]
youSum(5, 100, 200, 300) //5 [100,200,300]
youSum(5, 100, 200, 300, 400) //5 [100,200,300,400]
let mySum = (...args) => {
  console.log(args)
}
mySum(10, 20, 30, 40) //[10, 20, 30, 40]
用于数组[]或对象{}中, 可以将数组的项或对象的键值对展开
let arr = [1, 3, 5, 7]
console.log(...arr) // 打印数组的每一项 1,3,5,7
let arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
let newArr = [...arr1, ...arr2]
let arr = [3, 100, 20]
let max = Math.max(...arr3)
let obj1 = {
  name: 'Liao',
  age: 18,
}
let obj2 = {
  money: 10000000000,
  car: "没有"
}
// 相当于快速浅拷贝
let obj3 = {
  ...obj1,
  ...obj2,
  name: 'liao'
}
//obj3 === {name: 'Liao',age: 18,money: 10000000000,car: "没有",name: 'liao'}
//obj3的name属性放到...obj2前面,name属性则会被覆盖
返回一个数组
返回的成员是参数对象自身的(不含继承的)所有可遍历属性的键名。
const obj = { a: "aaa", b: 1};
Object.keys(obj)  // ["a", "b"]
返回一个数组
返回的成员是参数对象自身的(不含继承的)所有可遍历属性的键值。
const obj = { a: "aaa", b: 1};
Object.values(obj)  // ["aaa",1]
返回一个数组
返回的成员是参数对象自身的(不含继承的)所有可遍历属性的键值对。
const obj = { a: "aaa", b: 1};
Object.entries(obj)  // [ ["a", "aaa"], ["b", 1] ]
一个对象如果有 length,有 index 数字属性,那它可被看成一个数组(鸭子模型:如果它走起来像鸭子,而且叫起来像鸭子,那么它就是鸭子)。
如:{length: 5, 0: 1},这个对象既有 length 属性,又有作为 index 的 0 属性,它具有作为数组的特质,即为一个类数组对象。
[1].slice.call({length: 1, 0:3})  // [3]
上面语句生成一个 length 为 1 且 index:0 位置为 3 的数组。[1] 只是一个迷惑写法,[] 中的数字改为其他任何数字,结果都一样。实质是 Array.prototype.slice.call(),即等同于
Array.prototype.slice.call( { length: 1, 0:3 } )
[].slice.call( { length: 1, 0:3 } ) 
作者:不要面包要蛋糕 链接: 类数组对象 – 简书
来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
遍历对象
获得对象的键名
for...in是为遍历对象而设计的,不适用于遍历数组。
for (variable in object) {...}
for…in语句以任意顺序遍历一个对象自有的、继承的、可枚举的、非Symbol的属性。对于每个不同的属性,语句都会被执行。
获得键值
let arr = ['a', 'b', 'c', 'd'];
 
for (let a of arr) {
  console.log(a); // a b c d
}
可遍历包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。
for...of可以响应break、continue、return语句
不可遍历普通对象(报错:obj is not iterable(obj不可迭代))
for...of循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。这一点跟for...in循环也不一样。
例:
let arr = [3, 5, 7];
arr.foo = 'hello';
 
for (let i in arr) {
  console.log(i); // "0", "1", "2", "foo"
}
 
for (let i of arr) {
  console.log(i); //  "3", "5", "7"
}
for…of 循环(ES6)_zhangbin0027的博客-CSDN博客
作用:实现数据私有
内层函数, 引用外层函数上的变量, 就可以形成闭包。
function count() {
	let num = 0 //只能在count函数中访问到
	function add() {
		num++
		console.log(num)
	}
//执行count函数会返回add函数,相当于外面可以执行add函数,且不能直接访问修改num
	return add
}
//addFN等价于返回的add函数
let addFN = count()
addFN() //1
function sum(x) {
	return function (y) {
		return console.log(x + y)
	}
}
//此时传值给sum函数的x
let fn = sum(3) 
//此时传值给内部匿名函数的y
fn(10) 
// 控制台结果为13