let命令
用let命令限定作用域
变量 i 的作用域
//ES5
if (true) {
var i = 1;
}
console.log(i);
![var.png var.png](https://blog.fmujie.cn/usr/uploads/2020/01/191338815.png)
//ES6
if (true) {
let i = 1;
}
console.log(i)
![let定义.png let定义.png](https://blog.fmujie.cn/usr/uploads/2020/01/1009533734.png)
重复定义
var i = 0;
switch (i) {
case 0:
let value = "hello";
case 1:
let value = "world";
}
![重复定义.png 重复定义.png](https://blog.fmujie.cn/usr/uploads/2020/01/157950878.png)
常量定义
const关键字
const data = 10;
console.log(data);
//data = 100 //执行错误
![constdata.png constdata.png](https://blog.fmujie.cn/usr/uploads/2020/01/129675358.png)
const list = [10, 20, 30];
console.log(list);
list[0] = 100;
console.log(list);
list = [1, 2, 3];//错误
![list.png list.png](https://blog.fmujie.cn/usr/uploads/2020/01/1370053082.png)
常量指的是数组本身,而不是数组里每个元素的值!!!
list = [1, 2, 3];//list等于一个新数组,变的是list变量,当然与const定义矛盾
还可插入等
const list = [10, 20, 30];
console.log(list);
list.push(99);
console.log(list);
![listpush.png listpush.png](https://blog.fmujie.cn/usr/uploads/2020/01/2358269031.png)
进制转换
console.log(0b10);//2
console.log(0o10);//8
console.log(0x10);//16
console.log(0b11 === 3);//true
console.log(0o10 === 8);//true
console.log(0x10 === 16);//true
let num = 10;
console.log(num.toString(8));//8进制转化
console.log(num.toString(2));
console.log(num.toString(16));
console.log(num.toString(5));
![进制转换.png 进制转换.png](https://blog.fmujie.cn/usr/uploads/2020/01/3530305511.png)
嵌入字符串
let name = "fmujie"
let mystr1 = "Hello, ${ name }!"
let mystr2 = `Hello, ${ name }! 再见。`
console.log(mystr1)
console.log(mystr2)
function tagged(formats, ...args) {
console.log(formats);
console.log(args);
}
tagged` 你好,${ name }! 再见。` //反单引号
tagged两个参数,一个是格式化的所有的内容,另一个是参数变量所有的值
![嵌入字符串.png 嵌入字符串.png](https://blog.fmujie.cn/usr/uploads/2020/01/4263045391.png)
模板的延长线
标准的模板使用
![模板标准使用.png 模板标准使用.png](https://blog.fmujie.cn/usr/uploads/2020/01/3752150051.png)
扩展文字模板
let name = "fmujie"
let address = "公园"
let str = `你好,${ name }! 晚上一起去${ address }玩吧!`
console.log(str)
let fmtstr = markdown`你好,${ name }! 晚上一起去${ address }玩吧!`
console.log(fmtstr)
function markdown(formats, ...args) {
console.log(formats)
console.log(args)
var result = "# 信息标题\n";
for(var i = 0; i< formats.length; i++) {
result += formats[i] + "**" + (args[i] || '') + "**"
}
return result
}
![模板延长.png 模板延长.png](https://blog.fmujie.cn/usr/uploads/2020/01/1293375527.png)
Symbol新类型
let str1 = "Hello World!"
let str2 = "Hello World!"
console.log(str1 == str2)//true
console.log(str1 === str2)//true
let str3 = Symbol("MySymbol")
let str4 = Symbol("Mysymbol")
console.log(typeof str3)
console.log(str3.toString())
console.log(str3 == str4)//false
console.log(str3 === str4)//false
为啥不一样,值虽然一样,但是Symbol内部分配了一个id(哈希值),比较的时候比较的是id值。
![symbol.png symbol.png](https://blog.fmujie.cn/usr/uploads/2020/01/2447057465.png)
Symbol的用法
const Java = Symbol()
const PHP = Symbol()
var lang = PHP
if(lang === PHP) {
console.log("PHP")
}
![作为常量.png 作为常量.png](https://blog.fmujie.cn/usr/uploads/2020/01/435723782.png)
let str1 = Symbol("mySymbol")
let str2 = Symbol("mySymbol")
var obj = {}
obj[str1] = "Hello"
obj[str2] = "World"
console.log(obj)
console.log(obj[str1])
console.log(obj[str2])
![作为属性.png 作为属性.png](https://blog.fmujie.cn/usr/uploads/2020/01/191054566.png)
const MyKey = Symbol()
class User {
constructor(key, name, age) {
this[MyKey] = key
this.name = name
this.age = age
}
checkKey(key) {
return this[MyKey] == key;
}
}
let user = new User(123, 'fmujie', 18)
console.log(user.name, user.age, user[MyKey])
console.log(user.checkKey(123))
console.log(user.checkKey(456))
console.log(Object.keys(user))
console.log(JSON.stringify(user))
![隐藏属性.png 隐藏属性.png](https://blog.fmujie.cn/usr/uploads/2020/01/4198134704.png)
ES6入门系列说明:本系列仅仅作为ES6入门教学视频的归纳总结与记录,在此感谢小马视频ORYouTube地址
还不快抢沙发