JS包含三个部分:
1). ECMAScript(核心)
2). 扩展==>浏览器端
* BOM(浏览器对象模型)
* DOM(文档对象模型)doucument
3). 扩展==>服务器端
Node
ES5
严格模式(消除代码中的写)
使用方法:
1* 在全局或函数的第一条语句定义为: 'use strict';
如果浏览器不支持, 只解析为一条简单的语句, 没有任何副作用
2.* 必须用var声明变量禁止自定义的函数中的this指向window
创建eval作用域,他能够解析传的字符串,相当于函数的传参数
- 对象不能有重名的属性
json对象
- JSON.stringify(obj/arr)
- js对象(数组)转换为json对象(数组)
- JSON.parse(json)
- json对象(数组)转换为js对象(数组)
ES5给Object扩展了一些静态方法, 常用的2个:
-
Object.create(prototype, [descriptors])
作用: 以指定对象为原型创建新的对象
-
为新的对象指定新的属性, 并对属性进行描述
value : 指定值
writable : 标识当前属性值是否是可修改的, 默认为false
configurable: 标识当前属性是否可以被删除 默认为false
enumerable: 标识当前属性是否能用for in 枚举 默认为false
-
Object.defineProperties(object, descriptors)
-
作用: 为指定对象定义扩展多个属性
get :用来获取当前属性值得回调函数
set :修改当前属性值得触发的回调函数,并且实参即为修改后的值
存取器属性:setter,getter一个用来存值,一个用来取值
-
1. Function.prototype.bind(obj) :
- 作用: 将函数内的this绑定为obj, 并将函数返回
- 面试题: 区别bind()与call()和apply()?
都能指定函数中的this
call()/apply()是立即调用函数
bind()是将函数返回,不会立即执行
bind的特点:绑定完this不会立即调用当前的函数,而是将函数返回
es6
语法规范
let关键字
- 作用:
- 与var类似, 用于声明一个变量
- 特点
在块作用域内有效
不能重复声明
不会预处理, 不存在变量提升
- 应用
循环遍历加监听,能存索引值
使用let取代var是趋势
const关键字
- 作用:
- 定义一个常量
- 特点:
不能修改
其它特点同let
- 应用
- 保存不用改变的数据
变量的解构赋值
- 理解:
- 从对象或数组中提取数据, 并赋值给变量(多个)
- 对象的解构赋值
let {n, a} = {n:'tom', a:12}
- 数组的解构赋值
let [a,b] = [1, 'hello'];
- 用途
- 给多个形参赋值
.### 模板字符串 : 简化字符串的拼接
- 模板字符串必须用 `` 包含
- 变化的部分使用${xxx}定义
<script type="text/javascript">
let obj = {username: 'kobe', age: 40};
let str = '我的名字叫:' + obj.username + ',我的年龄:' + obj.age;
console.log(str);
str = `我的名字叫:${obj.username},我的年龄:${obj.age}`;
console.log(str);
简化的对象写法
- 省略同名的属性值
- 省略方法的function
- 例如:
let x = 1;
let y = 2;
let point = {
x,
y,
setX (x) {this.x = x}
};
-->
<script type="text/javascript">
let username = 'kobe';
let age = 40;
let obj = {
username,//同名的属性可以省略不写
age,
getName(){//可以省略函数的function
return this.username;
}
};
console.log(obj);
箭头函数
作用: 定义匿名函数
- 基本语法:
- 没有参数: () => console.log('xxxx')
- 一个参数: i => i+2
- 大于一个参数: (i,j) => i+j
- 函数体不用大括号: 默认返回结果
- 函数体如果有多个语句, 需要用{}包围,若有需要返回的内容,需要手动返回
- 使用场景: 多用来定义回调函数
- 箭头函数的特点:
1、简洁
2、箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是在定义的时候所处的对象就是它的this
3、扩展理解: 箭头函数的this看外层的是否有函数,
如果有,外层函数的this就是内部箭头函数的this,
如果没有,则this是window。
//1、没有形参的时候
let fun1 = () => console.log('我是箭头函数');
fun1();
//2、只有一个形参的时候()可以省略
let fun2 = a => console.log(a);
fun2('aaa');
//3、两个及两个以上的形参的时候()不能省略
let fun3 = (x, y) => console.log(x, y);
fun3(25, 36);
//函数体的情况
//1、函数体只有一条语句或者是表达式的时候{}可以省略-->会自动返回语句执行的结果,或者是表达式的结果 如果加上大括号需要加上return
// let fun4 = (x,y) => {return x + y};
let fun4 = (x,y) => x + y;
console.log(fun4(24, 36));
//2、函数体不止一条语句或者表达式的情况
le t fun5 = (x, y) => {
console.log(x, y);
return x + y;
}