JS包含三个部分:
ECMAScript(核心) 扩展==>浏览器端:BOM(浏览器对象模型),DOM(文档对象模型) 扩展==>服务器端:Node
ES5严格模式:
作用:消除Javascript语法的一些不合理、不严谨之处, 消除代码运行的一些不安全之处
,为未来新版本的Javascript做好铺垫
使用:在全局或函数的第一条语句定义为: 'use strict'
语法:必须用var声明变量,禁止自定义的函数中的this指向window,创建eval作用域,对象不能有重名的属性
JSON对象:
与xml具有相同的特性,是一种数据存储格式,但json相比xml更易于人编写和阅读更易于生成和解析
JSON.stringify(obj): js对象(数组)转换为json对象(数组)
JSON.parse(obj): json对象(数组)转换为js对象(数组)
Object扩展:
Object.create(prototype, [descriptors]):以指定对象为原型创建新的对象,为新的对象指定新的属性, 并对属性进行描述 value(指定值),writable(标识当前属性值是否是可修改的, 默认为false),configurable(标识当前属性是否可以被删除 默认为false),enumerable(标识当前属性是否能用for in 枚举 默认为false)
Object.defineProperties(object, descriptors):为指定对象定义扩展多个属性 get(获取) set(修改) 存取器属性:setter,getter一个用来存值,一个用来取值
Array扩展:
Array.prototype.indexOf(value) : 得到值在数组中的第一个下标
Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
Array.prototype.forEach(function(item, index){}) : 遍历数组
Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组,返回加工之后的值
Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组, 返回条件为true的值
typeof查看数据类型
function扩展:
Function.prototype.bind(obj): 作用:将函数内的this绑定为obj,并将函数返回
面试题:区别bind()与call()和apply():
都能指定函数中的this call()/apply()是立即调用函数 bind()是将函数返回
ES6:
let关键字(声明变量)
特点:在块作用域内有效,不能重复声明,不会预处理不存在变量提升 应用:循环遍历加监听,使用let取代var是趋势
const关键字(定义一个常量)
特点:不能修改,在块作用域内有效,不能重复声明,不会预处理不存在变量提升 应用:保存不用改变的数据
变量的解构赋值
从对象或数组中提取数据并赋值给变量(多个)用途:给多个形参赋值
对象的解构赋值:let{n,a} = {n:'tom',a:12}
数组的解构赋值:let[a,b] = [1,'hello']
模板字符串:
必须用``包含,变化的部分使用$(xxx)定义
简化的对象写法:
省略同名的属性值,省略方法的function
箭头函数:
用来定义匿名函数
特点:
1、简洁
2、箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是在定义的时候所处的对象就是它的this
3、扩展理解: 箭头函数的this看外层的是否有函数,
如果有,外层函数的this就是内部箭头函数的this,
如果没有,则this是window。
语法:
没有参数:()=> console.log('xxxxx')
一个参数:i => i+2
大于一个参数:(i,j) => i+j
函数体不用大括号:默认返回结果
函数体如果有多个语句,需要用{}包围,若有需要返回的内容需要手动返回
使用场景:多用来定义回调函数