限制块作用域,限定作用域,let修饰会报错 j找不到
function f() {
var i = 1;
}
console.log(1)
function f1() {
let j = 1;
}
console.log(j)
常量再次赋值会报错
const data = 100;
console.log(data);
data = 10
数组元素是可以修改的,但是数组本身是不能变更的
const list =[1,2,3]
console.log(list)
list[0]=4
console.log(list)
0b 二进制 0o八进制 0x 十六进制
let num = 10;
console.log(num.toString(8))
console.log(num.toString(2))
console.log(num.toString(16))
反单引号表示模板
let name = "tony";
let str1 = "hello,${name}!"
console.log(str1)
let str2 = `hello,${name}!`
console.log(str2)
let str1 = String("HelloWorld")
let str2 = String("HelloWorld")
console.log(str1==str2)
console.log(str1===str2)
let s1 = Symbol("HelloWorld")
let s2 = Symbol("HelloWorld")
console.log(s1==s2)
console.log(s1===s2)
作为常量
const java = Symbol()
const php = Symbol()
作为属性名
const java = Symbol()
const php = Symbol()
var obj = {}
obj[java] = "java"
obj[php] ="php"
console.log(obj[java])
console.log(obj[php])
let [a,b,c] = [10,20,30]
console.log(a,b,c)
let [x,y,...other]=[1,2,3,4,5]
console.log(x,y,other)
let {name,age} ={name:"tony",age:20}
console.log(name,age)
let list = [10, 20, 30, 40, 50]
for (let v in list) {
console.log(v, list[v])
}
for (let v of list) {
console.log(v)
}
function sayHello(name = "tony") {
console.log(`hello ${name}`)
}
sayHello()
sayHello("xiaoming")
必须指定默认值
function required() {
throw new Error("参数不能为空")
}
function sayHello(name = required()) {
console.log(`hello ${name}`)
}
sayHello("xiaoming")
通过箭头简化代码
let list = [10,20,30];
//es5
let newList = list.map(function (value,index) {
return value*value
})
//es6
console.log(newList)
newList = list.map((value,index)=>{
return value*value
})
console.log(newList)
newList =list.map(value => {
return value*value
})
console.log(newList)
function sum(...args) {
let result = 0;
args.forEach(value => {
result += value
})
return result
}
console.log(sum(1,2,3,4))
class Student{
constructor(name,age){
this.name = name;
this.age = age;
}
print(){
console.log(`${this.name}--${this.age}`)
}
static info(){
console.log('静态类方式')
}
}
let s = new Student("xiaoming",20)
s.print()
Student.info()
class Student{
constructor(name,age){
this.name = name;
this.age = age;
}
set gender(v){
this._gender = v
}
get gender(){
return this._gender
}
}
let s = new Student("xiaoming",20)
s.gender = "M"
console.log(s.gender)
es5中函数回调
let ajax = function (callback) {
console.log('执行')
setTimeout(function () {
callback&&callback.call()
},1000)
}
ajax(function () {
console.log('timeout')
})
作用 解决异步回调问题,传统方式,大部分用回调函数/事件。
new Promise(function (resolve,reject) {
//resolve 成功调用
//reject 失败调用
})
let a = 10;
let promise = new Promise(function (resolve,reject) {
if (a ==10) {
resolve("success")
}else {
reject("fail")
}
})
promise.then(res=>{
console.log(res)
},err =>{
console.log(err)
})
捕获错误
promise.catch(err=>{
console.log(err)
})
Promise.resolve()
new Promise(resolve => {
resolve("aaa")
}).then(res=>{
console.log(res)
})
Promise.all([p1,p2,p3]):把promise批量处理,必须确保所有的promise对象,都是resolve状态,都是成功的
let p1 = Promise.resolve("a")
let p2 = Promise.resolve("b")
let p3 = Promise.resolve("c")
Promise.all([p1,p2,p3]).then(res =>{
let [r1,r2,r3] = res
console.log(r1,r2,r3)
})
Promise.race
let p1 = Promise.resolve("a")
let p2 = Promise.reject("b")
let p3 = Promise.resolve("c")
Promise.race([p1,p2,p3]).then(res =>{
console.log(res)
})