1、null和undefined的区别
null表示一个空的值,和0以及空字符串' '不同,0是一个数值,‘ ’表示长度为0的字符串,而null表示空。
undefined表示未定义。大多数情况下应该用null。undefined仅仅在判断函数参数是否传递 的情况下有用。
2、js是动态语言,可以对变量进行任意赋值。也可以自由的给对象添加或删除熟悉。
var i=2;
i='123'
静态语言比如java不行。
3、strict模式
es5中强制使用var声明变量,如果浏览器支持strict模式,变量未进行声明,会报referenceError错误。
而在es6中,使用let声明局部变量,var声明全局变量,const声明常量
4、字符串
es6新增字符串拼接:
var name='xhh';
var age=20;
var message='你好,${name}今年${age}岁了
常见操作:
string.length;
字符串是不可改变的,使用string[i]改变字符串时,不会报错但也不会又任何改变。
string.toUpperCase()
string.toLowerCase()
string.indexOf(str) 搜索指定字符串出现的位置,未找到返回‘-1’
string.substring(x,y)返回指定索引区间的子串
5、数组
对array.length进行赋值会改变数组的大小
对array[i]赋值时,如果i>array.length也会改变array的大小
array.indexOf()
array.slice(x,y)返回x位置开始的y个元素
array.push(),array.pop()入栈出栈
array.unshift()往头部添加
array.shift()把头部第一个元素删除
array.sort()排序
array.reverse()反转
array.splice()指定的索引开始删除若干元素,然后再从该位置添加若干元素
array.concat()拼接,返回新的数组
array.join()用'-'将每个元素连接起来,然后返回连接后的字符串
6、if ...else...
如果语句块只包含一条语句,那么可以省略{}。省略{}的危险之处在于,如果后来想添加一些语句,却忘了写{},就改变了if...else...的语义
7、Map和Set
8、for ... of 遍历Map,Set,Array
修复了for ...in 的问题
var a = ['A','B','C'];
a.name ='Hello';
for(var x in a) {
console.log(x);// '0', '1', '2', 'name'
}
9、获取所有参数,使用...rest
let sum=function(...rest) {
let n=0;
for(let i=1;i<rest.length;i++){
n+=rest[i]
}
return n
}
sum(1,2,3,4)
10、array.map()和array.forEach()区别
使用forEach来修改原数组,使用map来返回一个新的数组
array.forEach((number,index) => {
return array[index]=num*2;
})
forEach适合于你并不打算改变数据的时候,而只是想用数据做一些事情 – 比如存入数据库或则打印出来。
let doubled=array.map( num=>{
return num*2
})
map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。这样的优点在于你可以使用复合(composition)(map(), filter(), reduce()等组合使用)来玩出更多的花样。
11、变量提升
javaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部.
严格遵守“在函数内部首先申明所有变量”
12、var that=this;
a={
name:'xhh',
birth:1995,
age:function(){
var that=this;
function getAge(){
return new Date().getFullYear()-that.birth;
}
return getAge();
}
a.age();
13、apply和call
指定this指向哪个对象,可以用函数本身的apply方法,apply接收两个参数,一个是需要绑定的this变量,一个参数是array,表示函数本身的参数。
call与apply类似,apply把参数打包成array,call按顺序传入
Math.max.apply(null,[1,2,3])
Math.max.call(null,1,2,3)
改变内置函数指向
var count=0;
var oldParseInt=parseInt;
window.parseInt=function(){
count+=1;
return oldParseInt.apply(null,arguments)
}
14、array.reduce
let a=[1,2,3,4]
a.reduce(function(x,y){
return x+y;
}
Array的reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算
15、重写parseInt
function stringToInt(s){
let strArray=s.split('');
let intArray=strArray.map((x) => {
return +x;
})
return intArray.reduce( (x,y) => {
return x*10+y;
})
}
16、大小写规范
function normalize(arr){
function change(item){
let newItem=item[0].toUpperCase+item.substring(1).toLowerCase();
return newItem;
}
arr.map(change);
}
17、array.map(parseInt)问题
正确写法array.map(function(x){
return parseInt(x);
}
因为parseInt接收三个参数currentValue,index,array