let
关键字是用来声明变量的 ,只要遇到大括号就形成作用域
【注】let关键字声明的变量,所在的作用域叫做块级作用域
let声明的变量不会在作用域中提升,而var声明的变量则会在作用域中提升
在let声明之前的执行瞬间被称为”暂时性死区”,在此之前调用任何后面声明的变量都会抛出异常
let在全局作用域声明的变量不会成为window对象的属性(var声明的变量则会)
console.log(name);//undefined
var name = 'xxx';
//以上代码等同于
var name;
console.log(name);//undefined
name ='xxx'
console.log('name');//抛出异常 ReferenceError:name未定义
let name = 'xxx';
var name = 'xxx'
console.log(window.name) //xxx
let age = 18
console.log(window.age) //undefined
var 关键字声明变量 将变量或者形参所在函数的大括号作为作用域处理
if(1){
var a = 10
}
alert(a)
if(1){
let a = 10;
alert(a);//输出10
}
alert(a)//a为underfined
const
声明变量,变量值只能在声明时确定,后续无法修改
声明对象,修改对象内部属性的值并不违反const 的限制
const a = PI;
a = 10;
alert(a)//输出PI
const obj = {}
obj.name = 'xxx'
console.log(obj.name)
新增数据类型
symbol 表示值为符号
箭头函数
新的函数写法
【注】适当的省略函数中function和return关键字
各种形式的箭头函数
- 无参数,无返回值 ```javascript function show() { alert(‘helloworld’) }
var show = () => { alert(‘helloworld’) }
2. 有一个参数,无返回值
```javascript
function show(num){
alert(num)
}
var show = num => {
alert(num)
}
有一个参数,有返回值
function show(num){
return num+2
alert(num)
}
var show = num => {
return num+2
alert(num)
}
有多个参数,有返回值
function show(x,y){
alert(x+y)
}
var show = (x,y) => {
alert(x+y)
}
filter 过滤
var arr = [10,20,30,40,50]
//var newArr = arr.fliter(function(item){return item > 30 })
var newArr = arr.fliter(item => {item > 30})
alert(newArr)
箭头函数需要注意的部分
箭头函数不能用new
- 箭头函数如果返回值时一个对象,一定要加()
- 箭头函数中的this,指向的时上一层函数的主人
var person = {
username:'钢铁侠',
show:function() {
alert(person.username)
alert(this.username)
}
show: => {(
alert(person.username)
alert(this)//window
)}
}
解构
大括号解构
中括号解构 ```javascript var x = 10, y = 20, z = 30;
var [x,y,z] = [10,20,30] alert(x +’,’+ y +’,’+ z) var [x,[y,z]] = [10[20,30]] alert(x +’,’+ y +’,’+ z)
var {name,age,sex} = { age:18, name:’张三’, sex:’男’ }
使用解构的好处:
1. 交换两个数
1. 函数可以返回多个值
1. 函数定义参数,和传入参数的顺序改变
【注】参数可以带默认值
4. 快速取出数组中的某一个元素
```javascript
var arr = [10,20,30,40,50]
var {0:first,4:last} = arr;
alert(first)
alert(last == 4)
字符串
传统字符串:所有单引号,双引号括起来的都叫做字符串
ECMA6字符串:反引号
- ECMA6字符串想怎么写就怎么写,换行,代码缩进,都能在字符串中体现出来
- ${变量/表达式/函数调用}
var str = ` hello world`
var showSelf = (name,age,sex) => {
alert(我叫${name},今年${age}岁,是一名${sex}性)
}
showSelf({
name:'小明',
age:18,
sex:'男'
})
新增数组方法
Array.form(伪数组) 将伪数组转成真数组
var li = document.getElementsByTagName('li')
li = Array.form(li)
li.push('hello')
alert(li)
find()
【功能】:在数组中查找符合条件的元素,只要找到第一个符合条件的元素,就终止遍历
返回值: 查找到的元素 ```javascript var arr = [10,20,30,40,50] alert(arr.find(function(item){ //查找条件 return item>30 }))
alert(arr.find((item) => { item > 30 }))
<a name="Hb5Kj"></a>
### findIndex()
返回值: 查找到的元素的下标
```javascript
var arr = [10,20,30,40,50]
alert(arr.findIndex(function(item){
//查找条件
return item>30
}))
alert(arr.findIndex((item) => {
item > 30
}))
arr.copyWithin()
参数:
第一个参数: 是从哪个下标开始
第二和第三个参数:范围[start , end]
var arr = [0,1,2,3,4,5,6,7,8,9]
arr.copyWithin(0,7,9)
alert(arr)//[7,8,9,3,4,5,6,7,8,9]
合并对象
Object.assign() 合并对象
【注】将所有传入的对象都合并到第一个对象中去
浅拷贝:只拷贝地址
深拷贝:将复合数据类型重新生成一份,进行拷贝
var obj1 = {a:10}
var obj2 = {b:10}
var obj3 = {c:30}
Object.assign(obj1,obj2,obj3)
consloe.log(obj1)//{a:10,b:10,c:30}
集合
- 不重复
- 无顺序
set map
let img = new Set()
//添加元素
img.add(100);
img.add('hello');
img.add('world');
img.add('true');
img.add(100);
img.add('hello');
img.add('world');
console.log(img)//自动去重
集合遍历
for … of遍历集合
for (let item of imgs.keys()){
console.log(item)
}
for (let item of img.values()){
console.log(item)
}
for (let item of imgs.entries()){
console.log(item)
}
数组变集合
var set = new set([10,20,30,40,50,40,30,20,10])
concole.log(set)
集合变数组 将数据结构展开成数组
var arr = [10,20,30,40,60,40,50,10]
arr = [...new Set(arr)]
map 映射
let map = new Map()
//添加数据
map.set('张三','打鱼的')
map.set('李四','种地的')
map.set('王五','挖煤的')
map.set('李四','打猎的')
console.log(map)
/*
取值
*/
console.log(map.get('王五'))
map遍历 通过for of
for(let [key,value] of map){
console.log(key,value)
}
补充内容
数组
对象
for…in
set for…of
map for…of
var arr = [10,20,30,40,50]
for(var i = 0; i < arr.length; i++){
document.write('for循环' + arr[i] + ',' + i + <br>)
}
var arr = [10,20,30,40,50]
for(var i in arr){
document.write('for...in循环' + arr[i] + ',' + i + <br>)
}
var arr = [10,20,30,40,50]
arr.foreach(function (item , index){
document.write('foreach循环' + item + ',' + index + <br>)
})
var arr = [10,20,30,40,50]
for(item of arr){//item是当前遍历到的元素
document.write('for...of循环' + item <br>)
}
var person = {
username: '钢铁侠',
age: 18,
sex: '男'
} ;
for(var attr in person){
//attr 遍历到的对象的属性
document.write('对象': + attr + O + <br>)
}