var 允许在同一作用域中重复声明,全局变量
let 不允许在同一作用域中重复声明,否则将抛出异常。块级变量
const 声明的是一个只读变量,声明之后不允许改变其值。块级变量
引入字符串的新方式[ ` ` ]
<script>
const str =`我是一个字符串`;
console.log(str);
</script>
[``]中可出现换行符。
<script>
const str =`<ul>
<li>111</li>
<li>222</li>
<li>333</li>
</ul>`;
</script>
可用于字符串拼接
<script>
const str ='张三';
const str2=`${str}是李四他哥`
console.log(str2);
</script>
可以简化对象的书写
<script>
let str = '张三';
let str2= function change() {
alert("111");
}
const school={
str,
str2,
make(){
console.log("222");
}
}
console.log(school);
</script>
箭头函数
箭头函数中this是静态的,不会发生改变
<script>
function getName() {
console.log(this.name);
}
let getName2 = () => {
console.log(this.name);
}
window.name = "张三";
const school = {
name: '李四'
}
getName();
getName.call(school);
getName2();
getName2.call(school);
</script>
不可以用作构造函数
<script>
let Person=(name)=>{
this.name=name
}
let me =new Person()
</script>
不可以使用argument
<script>
let fn=()=>{
console.log(arguments);
}
fn(1)
</script>
普通函数的this总是指向调用它的那个对象,箭头函数自身没有this,它的this一直都是指向其定义的作用域中,所以箭头函数的this不是在对象里面
Symbol
JavaScript中的第七种数据类型,与undefined、null、Number(数值)、String(字符串)、Boolean(布尔值)、Object(对象)并列。
const s = Symbol("s");
const s2=Symbol("s");
const t=Symbol.for("t");
const t2=Symbol.for("t");
console.log(s==s2);//false
console.log(t==t2);//true
Symbol的用法
<script>
let game = {
name: '张三',
up: function () {
},
down: function () {
}
}
//声明Symbol类型的up down
let m = {
up: Symbol(),
down: Symbol()
}
//给game添加方法
game[m.up] = function () {
console.log("aaa");
}
game[m.down] = function () {
console.log("bbbb");
}
game[m.up](); // aaa
//调用symbol类型say方法
let say = Symbol();
let youxi = {
[say]: function () {
console.log("say");
}
}
youxi[say]();// say
</script>
Symbol的遍历
var s1 = Symbol('a');
var s2 = Symbol('b');
var a = {
name: "张三",
[s1]: 24,
[s2]: function () {
console.log("s2");
}
}
var s = Object.getOwnPropertySymbols(a);
console.log(...s);//Symbol(a),Symbol(b) 遍历Symbol类型
console.log(Reflect.ownKeys(a));//['name', Symbol(a), Symbol(b)] 遍历所有
console.log(s[0]);//Symbol(a)
console.log(a[s[0]]);//24
a[s2](); //s2
a[s[1]](); //s2
console.log(a[s1]);//24
console.log(a[s1]);//24