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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。