let
关键字是用来声明变量的 ,只要遇到大括号就形成作用域
【注】let关键字声明的变量,所在的作用域叫做块级作用域
let声明的变量不会在作用域中提升,而var声明的变量则会在作用域中提升
在let声明之前的执行瞬间被称为”暂时性死区”,在此之前调用任何后面声明的变量都会抛出异常
let在全局作用域声明的变量不会成为window对象的属性(var声明的变量则会)
console.log(name);//undefinedvar name = 'xxx';//以上代码等同于var name;console.log(name);//undefinedname ='xxx'console.log('name');//抛出异常 ReferenceError:name未定义let name = 'xxx';var name = 'xxx'console.log(window.name) //xxxlet age = 18console.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)//输出PIconst obj = {}obj.name = 'xxx'console.log(obj.name)
新增数据类型
symbol 表示值为符号
箭头函数
新的函数写法
【注】适当的省略函数中function和return关键字
各种形式的箭头函数
- 无参数,无返回值 ```javascript function show() { alert(‘helloworld’) }
var show = () => { alert(‘helloworld’) }
2. 有一个参数,无返回值```javascriptfunction show(num){alert(num)}var show = num => {alert(num)}
有一个参数,有返回值
function show(num){return num+2alert(num)}var show = num => {return num+2alert(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. 快速取出数组中的某一个元素```javascriptvar 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()返回值: 查找到的元素的下标```javascriptvar 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>)}
