es5特征
es5新增的string、number、object、Date、function、json等要领,个中json的要领在es5中被标准话!
Native JSON
JSON.parse(str)(json的反序列化)
let str='[{"name":"小勇","age":18},{"name":"小刚","age":23},{"name":"大勇","age":25},{"name":"小花","age":13},{"name":"小黑","age":34},{"name":"小白","age":26}]'
//用来将json字符串转成json对象(json的反序列化)
let jsonObj=JSON.parse(str);
console.log(jsonObj)//(6) [Object, Object, Object, Object, Object, Object]
JSON.stringify(arr)(json的序列化)
let arr=[
{"name":"小勇","age":18},
{"name":"小刚","age":23},
{"name":"大勇","age":25},
{"name":"小花","age":13},
{"name":"小黑","age":34},
{"name":"小白","age":26}
];
//将json对象转成json字符串(json的序列化)
let jsonStr=JSON.stringify(arr);
console.log(jsonStr); //字符串
es5-Array
以下要领悉数跟回调函数
Array 迭代要领
forEach 数组遍历 可传值
let arr=[1,2,3,4,5];
//forEach s数组遍历 可传值
arr.forEach(function(value,index){
console.log(value);
console.log(index)
})
map返回数组,数组遍历
let arr1=arr.map(function(value){
return value*2+1
} )
filter对数组的值举行选择性的返回
let arr2=arr.filter(function(value){
return value>2
})
console.log(arr2)
some 只需有一个前提满足就返回true
let arr3=arr.some(function(value){
return value>5
every 一切的满足
let arr4=arr.every(function(value){
return value>0
})
console.log(arr4)//true
索引
indexOf()返回数组下标
console.log(arr.indexOf(5));
if(arr.indexOf(5)>1){
console.log("准确")
}
lasTindexOf()同上
从背面返回数组下标
累加要领 迭代
reduce() 盘算数组和
let arr=[1,2,3,4,5];
let result=arr.reduce(function(last,now){
return last+now;
},0)//后边跟最先跟谁人盘算
console.log(result)//15
reduceRight()同上从右侧盘算
数组的静态要领
isArray() 推断数组是不是是数组 ps:是数组返回true,不是返回false
let z=2
console.log(Array.isArray(z));//false
String
string trim 去除字符串的空缺
let str=' abc'
console.log("|"+str+"|")
console.log("|"+str.trim()+"|")
Date
console.log(Date.now()); 返回1970年7月1日到现在秒数
console.log(new Date().toJSON())
console.log(new Date().toISOString().slice(0,10));
/*
1500712773697
es5要领.html:18 2017-07-22T08:39:33.697Z
2017-07-22
Number
toFixed()小数四舍五入
let a=new Number(1.326);
let b=new Number(1.324);
console.log(a.toFixed(2));//1.33
console.log(b.toFixed(2));//1.32
let c=1000000000000000000000;
console.log(c.toPrecision(4));//1.000e+21
ps:在es5中我们经经常运用Math.round()
function
var x=1;
let obj5={
x:2
}
function fn1(){
console.log(this.x); //1
}
//bind用来转变this指针的作用域
let fn2=fn1.bind(obj5);//2
fn2()
es5_Object
1.create(指定_proto_)可用来指定原型
let obj={
x:1,
y:2
}
let obj2=Object.create(obj,{z:{
value:3
}});
console.log(obj2);
//es6
let ob2={
_proto_:obj,
z:3
}
console.log(ob2);
2.Object.defineProperty() 指定属性
Object.defineProperty(obj2,"j",{
value:5,
writable:true, //能够修正
enumerable:true, //可遍历 能够遍历原型上的东西
configurable:false //可设置吗
})
obj2.j=30;
console.log(obj2)//Object {z: 3, j: 5}
for(var key in obj2){
console.log(key);
}
Object.defineProperties() 定义多个属性
Object.defineProperties(obj2,{
"m":{
value:"abc",
},
"n":{
value:"cba"
}
})
console.log(obj2) //Object {j: 30, z: 3, m: "abc", n: "cba"}
getOwnPropertyDescriptor 猎取属性形貌
let desc=Object.getOwnPropertyDescriptor(obj,"x");
console.log(desc)//Object {value: 1, writable: true, enumerable: true, configurable: true}
Object.keys 返回对象的key值
console.log(Object.keys(obj));
console.log(Object.values(obj));
console.log(Object.entries(obj));
Object.getOwnPropertyNames() 猎取它自己的属性 一切属性名
let obj3=Object.getOwnPropertyNames(obj)
console.log(obj3)
Object.preventExtensions()阻挠对象扩大
let obj={
x:1,
y:2
};
//Object.preventExtensions(obj);//阻挠扩大
Object.seal() 密封 阻挠默许对象,不可举行设置
// Object.seal(obj)
Object.freeze() 凝结一切属性可读不能够设置
Object.freeze(obj)
Object.defineProperty(obj,"x",{
value:5,
writable:false, //能够修正
enumerable:false, //可遍历 能够遍历原型上的东西
configurable:false //可设置吗
})
//obj.x=5
obj.z=3;
obj.fn=function(){
}
console.log(obj);
Object.isExtensible() 是不是可扩大 true false
Object.isSealed() 是不是密封
Object.isFrozen() 是不是凝结
es5严厉形式
'use strict'
//严厉形式弃用之前版本的语法,在用报错
//让你运用一些最新版本的语法
运用var声明变量严厉形式中将不通过
何运用’eval’的操纵都邑被制止
val作用域
ith被禁用
aller/callee 被禁用
制止扩大的对象增加新属性会报错
除体系内置的属性会报错
delete运用var声明的变量或挂在window上的变量报错
delete不可删除属性(isSealed或isFrozen)的对象时报错
对一个对象的只读属性举行赋值将报错
对象有重名的属性将报错
函数有重名的参数将报错
八进制示意法被禁用
arguments严厉定义为参数,不再与形参绑定
函数必需声明在顶层
ES5里新增的关键字不能当作变量标示符运用,如implements, interface, let, package, private, protected, pulic, static, yield
call/apply的第一个参数直接传入不包装为对象
call/apply的第一个参数为null/undefined时,this为null/undefined
bind的第一个参数为null/undefined时,this为null/undefined