尽量使用let (量可变),const(量不可变)
使用严格等于===
**乘方运算
块级作⽤域:语句块形成的变量作⽤域。只对 let/const 声明的变量/常量有效,对 var 声明的变量⽆效。
condition 为以下值时都被认为是 false:
false
null
undefined
0
NaN
‘’ / “” / ``
其他值则被当作 true
对象可以修改值,但不能整体修改
箭头函数: ((x)=>x**3)(6)
匿名函数命名及使用
const c=((x)=>x**3)
c(6)
function也是object
JavaScript 的函数调⽤都是传值调⽤ 交换值用数组或对象
全局变量:对浏览器⽽⾔,挂载在 window 对象上的属性是
全局变量。例如直接写 window.a = 1,将使 a 成为⼀个全局
变量。或者在⾮严格模式下,在全局作⽤域直接写 a = 1
(不使⽤ var let const 声明)也将使 a 挂载到 window 对象
上,成为全局变量。
对数组的map操作 arr.map( (item)=>item**3 )
统计,词频的统计 arr.reduce((acc, item) => acc + item, 0)
// Object.keys 获取对象的所有⾃有属性
// Object.values 获取对象的所有⾃有属性的值
const obj = {
a: 1, b: 2, c: 3 }
const keys = Object.keys(obj)
const values = Object.values(obj)
console.log(keys) // ['a', 'b', 'c']
console.log(values) // [1, 2, 3]
闭包,原型链,面向对象
箭头函数的 this 只取决于函数
实例产⽣时所捕获的外界的
this。
// global
const obj = {
test1: () => console.log(this),
test2() {
return () => console.log(this)
},
test3: () => () => console.log(this) }
obj.test1() // window
obj.test2()() // obj
obj.test3()() // window
数组方面
// pop, push 尾部
// shift, unshift 头部
// 都会修改原数组
let arr1 = [1, 2, 3]
console.log(arr1.pop()) // 3
console.log(arr1) // [1, 2]
arr1.push(11)
console.log(arr1) // [1, 2, 11]
console.log(arr1.shift()) // 1
console.log(arr1) // [2, 11]
arr1.unshift(12)
console.log(arr1) // [12, 2, 11]
// splice(start, len, ...ins)
// 修改原数组
// 删除从 start 开始的 len 个元素
// 并将 ins 中的新元素插⼊到 start 开始的位置
let arr5 = [1, 2, 3, 4, 5]
arr5.splice(1, 3) // [2, 3, 4]
console.log(arr5) // [1, 5]
let arr6 = [1, 2, 3, 4, 5]
arr6.splice(1, 3, 11, 12)
// [2, 3, 4]
console.log(arr6)
// [1, 11, 12, 5]
// concat 连接到尾部,不修改原数组
let arr2 = [1, 2, 3]
let arr3 = [4, 5, 6]
let arr4 = arr2.concat(arr3)
console.log(arr2) // [1, 2, 3]
console.log(arr4) // [1, 2, 3, 4, 5, 6]
// slice(start, end) 切⽚,arr 下标 [start, end) 的值
// 不修改原数组
console.log(arr4.slice(2, 4)) // [3, 4]
// join(spliter) 使⽤ spliter 作为分隔符连接数组每⼀项
// 相当于 String.prototype.split 的反操作
let s = arr4.join('|') // 1|2|3|4|5|6