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
用于函数形参,必须放在形参最后一个!
arguments
function 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