“use strict”
一般模式
在严格模式中,形参不允许同名
function (val,val){
在严格模式中,变量要先声明在赋值
var b=2;
console.log(val);
普通函数this指向的是window,但是如果是严格模式this是undefined
}
fn(12)
this
在事件函数中,this指向事件原
1.严格模式
“use strict” 写在程序开始,限制所有程序;写在函数体的开始–限制的是函数内部的代码程序
严格模式常见的要求:
在严格模式中,变量要先声明在赋值
定义变量必须要有var
严格模式下,八进制被禁用
严格模式下,函数必需声明在程序的最顶端
argument不同
eval()解析后有自的作用域
严格模式下全局函数的this返回的是undefined;
2.let关键字 let 块级作用域
let 声明变量
let 不允许重复声明变量
let 必须在某个{}内部使用
let 在作用域范围内 声明的变量没有变量提升; 暂时性死区:通过let声明的变量 变量声明之前该变量不可用,这种现象就称作暂时性死区
let 块级作用域案例:点击某个li,获取li在页面的下标
3.this指向的改变
this含义–当前对象:指事件的调用都 或 方法的调用者
改变匿名函数的this指向:bind(this指向的对象)
案例:
var oDiv = document.getElementById("oDiv");
setTimeout(function(){
this.style.display = "none";
}.bind(oDiv),3000);
document.onclick = function(){
this.style.display = “none”;
}.bind(oDiv);
改变非匿名函数的this的指向:apply() 或 call()
apply() 或 call():函数名.apply( 函数体内部this指向的对象 )
案例:
var oDiv = document.getElementById("oDiv");
function fn(){
alert(this);
}
fn.apply( oDiv );
fn.call( oDiv );
4.for…of
for … of 遍历数组:遍历结果为值 但不能遍历JS1ON对象,会报错
es5新增的方法
for … in 遍历数组:遍历结果为下标 主要用于遍历对象
5.const关键字
定义常量的关键字
常量:不会变化的量;(以固定值的形式存在)
常量定义后不能在使用的过程中发生改变,如果改变,程序报错
const PI = 3.14159;
PI = 3.14;//报错
常量名一般用大写表示,与变量区别开来
7.字符串模板
解析字符串中的变量,使用${ 变量名 }
字符串模板:;主要是为了减少字符串拼接时容易出现的拼接错误
字符串模板中 既可以识别变量,也可以识别函数
8.箭头函数
一般是匿名函数使用箭头函数
var fn = () => {
alert("箭头函数");
}
箭头函数传参:
var fn = ( 参数 ) => {}
箭头函数返回值
var fn = ( 参数 ) => { return ... }
注:使用匿名函数不能使用bind()、call(),apply()改变this指向
9.解构赋值
var [a,b,c] = [1,2,3]
console.log(a,b,c);
var { uname,age } = { uname : “Tom” , age : 23 };
console.log( uname,age );
好处:
1.可以一次性定义多个变量
2.可以让一个函数返回多个值
3.可以作用在函数的传参上,以对象的方式传递,可以无视参数的顺序,形参与对象的键命名要一致。
4.可以轻松实现两个数的交换
案例:
使用解构赋值实现两个数的交换
使用解构赋值实现冒泡排序
10.Array.from()
一个参数:
Array.from( obj ):将一个含有length属性的对象、集合、类数组、伪数组 转成真正的数组
两个参数:第二个参数可以省略,如果传递第二个参数,第二个参数是一个类似map的函数
案例:Array.from()实现隔行变色
面试题 : 定义一个函数,功能实现 生成m个n的数组 要求: 不利用循环
function fn(m,n){
var newArr = Array.from( { length:m },() => {
return n;
});
return newArr;
}
fn(6,3);
11.set集合和map集合
set集合:var set = new Set();定义一个set集合
new Set( 23,43,23 );不能这样传
new Set( [23,43,23] );要用[ ]的方式传参
或者:
var set = new Set()
set.add( 23 ).set.add( 43 ).set.add( 23 )...
set集合的特点:
1.自动去重
2.不会进行自动类型转换
案例:
利用set实现数组去重,最张要得到一个数组
var arr = Aarry.from( new Set( [23,12,23,32,43,53,32,12,32] ) );
alert( arr );
史上最短的数组去重方法
var arr = […new Set( [23,12,23,32,43,53,32,12,32] )];
set集合的属性:
size:集合值的个数
set集合的方法:
add();向集合中添加一个值,一次只参添加一个
delete();删除集合中的某个值
has();判断集合中是否有某个值
clear();清空集合
set集合的遍历:
set.forEach( ( item ) => { console.log( item ) } );
map集合 --存储的数据以键值对的形式存储
map集合的方法:
set(键,值);向集合中添加一个键值对
delete(键);根据键删除集合中的某个值
has(键);根据键判断集合中是否有某个值
get(键);根据键获取集合中对应键的值
clear();清空集合
map集合的遍历:
for( var val of map ){
alert( val[0] );
}