一、简介
- ECMAScript 5.1 (或仅 ES5) 是ECMAScript(基于JavaScript的规范)标准最新修正。 与HTML5规范进程本质类似,ES5通过对现有JavaScript方法添加语句和原生ECMAScript对象做合并实现标准化。ES5还引入了一个语法的严格变种,被称为”严格模式(strict
mode)”。
二、浏览器支持
Opera 11.60
Internet Explorer 9*
//ie10才支持严格模式 可以用es5shim处理兼容问题
Firefox 4
Safari 5.1**
Chrome 13
兼容ie8: es5-shim
https://www.npmjs.com/package/es5-shim
三、ES5的严格模式 ‘use strict’
给作者提供了选择一个限制性更强语言变种的方式
1. 消除不安全之处,保证安全运行 2. 提升编译效率 3. 未来发展趋势 规则: 1)变量先定义在使用 2)不允许变量重名 var a=1; function a(){} 3)不允许使用eval 4)不允许delete 4)不允许with语句 var sMessage = "hello"; with(sMessage) {alert(toUpperCase());}
四、JSON
JSON.parse、JSON.stringify
五、添加对象
新增方法
// 添加或更改对象属性
Object.defineProperty(object, property, descriptor)
// 添加或更改多个对象属性
Object.defineProperties(object, descriptors)
// 访问属性
Object.getOwnPropertyDescriptor(object, property)
// 以数组返回所有属性
Object.getOwnPropertyNames(object)
// 以数组返回所有可枚举的属性
Object.keys(object)
// 访问原型
Object.getPrototypeOf(object)
// 阻止向对象添加属性
Object.preventExtensions(object)
// 如果可将属性添加到对象,则返回 true
Object.isExtensible(object)
// 防止更改对象属性(而不是值)
Object.seal(object)
// 如果对象被密封,则返回 true
Object.isSealed(object)
// 防止对对象进行任何更改
Object.freeze(object)
// 如果对象被冻结,则返回 true
Object.isFrozen(object)
六、额外的数组
新增方法
Array.prototype.indexOf
//跟字符串查找一样,查找指定元素是否存在,如果存在,返回下标,如果不存在返回-1
let arr = [1,2,3,4];
console.log(arr.indexOf(3)); // 2
Array.prototype.every
示例:
let arr = [
{name:"yang", age:18, like:"sport"},
{name:"yang", age:38, like:"eat"}
]
let result = arr.every(function(value, index, arr){
return value.name == "yang";
});
console.log(result) // ture
Array.prototype.some
some 查找数组中是否有满足条件的元素
var arr = [10, 30, 4];
var flag = arr.some(function(value,index,array) {
//参数一是:数组元素
//参数二是:数组元素的索引
//参数三是:当前的数组
return value < 3;
});
console.log(flag);//返回值是布尔值,只要查找到满足条件的一个元素就立马终止循环
Array.prototype.forEach
arr.forEach(function(value, index, array) {
//参数一是:数组元素
//参数二是:数组元素的索引
//参数三是:当前的数组
})
//相当于数组遍历的 for循环 没有返回值
Array.prototype.map
//map()方法返回一个被操作后的新数组,不会改变原数组
//map()一般配合return使用,如果没有return那跟forEach一样;
示例:
var arr = [
{name:"yang", age:18, like:"sport"},
{name:"wang", age:28, like:"sleep"},
{name:"ling", age:38, like:"eat"}
]
var newArr = arr.map(function(value, index, arr){
var json = {};
json.n = value.name;
json.a = value.age;
json.l = value.like;
return json;
})
console.log(newArr);
//
/* 输出:
[
{n: "yang", a: 18, l: "sport"}
{n: "wang", a: 28, l: "sleep"}
{n: "ling", a: 38, l: "eat"}
]
*/
Array.prototype.filter
var arr = [12, 66, 4, 88, 3, 7];
var newArr = arr.filter(function(value, index,array) {
//参数一是:数组元素
//参数二是:数组元素的索引
//参数三是:当前的数组
return value >= 20;
});
console.log(newArr);//[66,88] //返回值是一个新数组
七、Function.prototype.bind
bind会返回一个函数,不会立即执行 call 立即执行 (window,1,2,3) apply 立即执行 (window,[1,2,3])