美文网首页
ES5新特性(严格模式、JSON、Object、Array)

ES5新特性(严格模式、JSON、Object、Array)

作者: 拓跋123 | 来源:发表于2018-03-10 23:02 被阅读13次

初入前端坑

严格模式

关于JavaScript严格模式的一些贴个官网在这儿,但里面还是有点需要说明的,目前(2018年3月10日)还有个不支持的,如果你有兴趣自己试一下这个是不会报错的。但这不耽误你按规范写哈,我就是提一句。

"use strict"
var testObj = 
{
    prop1: 10, 
    prop2: 15,
    prop1: 20 
};

JSON对象

主要是两个方法,贴一下我的代码,还算清晰复制到浏览器就可以看结果了。

//声明一个可爱的“JSON格式”的String 
var str ='{"a":"1","b":2,"c":"13"}';
//1、JSON.parse把String转成Object了
var resultPars= JSON.parse(str);
console.log(str);
console.log(resultPars);
console.log("上面这还是String,下面就转成Object的了,typeof一下就更确定了");
console.log("typeof str:"+typeof str+"   typeof resultPars:"+typeof resultPars);
//如果你试了上面的代码就会发现1和13都还是String类型的
//那么可以看看下面这种神奇的使用方法
var resultPars2 = JSON.parse(str, function(key, value){
  if (typeof value == 'string'){
    return parseInt(value);
  } else {
    return value; 
  }
});
//这里的重点我觉得是typeof,不知道你觉得呢
console.log("现在就全都是数值类型的啦");
console.log(resultPars2);

//2、JSON.stringify 可以用来对Json对象进行简单过滤
var luckyNums = JSON.stringify(resultPars, function(key, value){
  if (value == 13) {
    return undefined;//使用undefined,则键值对就不会包含在最终的JSON中
  } else {
    return value;
  }
});
console.log("这里就少了值为13的键值对了");
console.log(luckyNums);
//JSON.stringify还可以用来做Json格式化,就用上面的这个例子,也好对比
var luckyNums = JSON.stringify(resultPars, function(key, value){
  if (value == 13) {
    return undefined;//使用undefined,则键值对就不会包含在最终的JSON中
  } else {
    return value;
  }
},4);
console.log("看一下和上面有什么不一样吧");
console.log(luckyNums);
运行结果

Object对象

方法有很多,但常用的是最后一个,其他的也重要哈,只是不太常用

Object.getPrototypeOf
Object.getOwnPropertyDescriptor
Object.getOwnPropertyNames
Object.create
Object.defineProperty
Object.defineProperties
Object.seal
Object.freeze
Object.preventExtensions
Object.isSealed
Object.isFrozen
Object.isExtensible
Object.keys

举个例子怎么用的,这样就可以简单遍历对象了,又贴代码了

var obj = {
    a: "1", 
    b: 2, 
    c: "13"
}
console.log(typeof obj);
for (var i = 0; i <Object.keys(obj).length; i++) {
    console.log(obj[Object.keys(obj)[i]]);
}
运行结果

Array对象

有好多方法在原型链上,下面这些吧,可以看看,然后实验几个

  1. isArray 判断是否为数组
"use strict"
var str = "aa";
var arr = [1,2,3,4,5,6];
console.info(Array.isArray(str));
console.log(Array.isArray(arr));
运行结果
  1. forEach 遍历循环数组
//这样就方便计算数组中数据了
arr.forEach(function(item,index,array){
    console.log("索引项:"+index+"  数组项:"+item);
})
  1. arr.map 处理原数组,返回处理后的值。
var arrObj = [
{name:"one",age:1},
{name:"two",age:2},
{name:"three",age:3},
{name:"four",age:4},
{name:"five",age:5},
{name:"six",age:6},
{name:"seven",age:7},
];
var ages = arrObj.map(function(obj){
    return obj.age;//返回值
});
console.log(ages);
运行结果
  1. arr.filter 过滤器,根据自己的条件进行过滤,filter和上面的map还是有点小区别的,自己发现吧。
"use strict"

var arrObj = [
{name:"one",age:1},
{name:"two",age:2},
{name:"three",age:3},
{name:"four",age:4},
{name:"five",age:5},
{name:"six",age:6},
{name:"seven",age:7},
];
var arrFilter = arrObj.filter(function(obj){
    return obj.age>5;//返回值的判断条件
});
console.log(arrFilter);
运行结果
  1. arr.some 判断数组中是否有满足需要的值,返回true/false
"use strict"

var arrObj = [
{name:"one",age:1},
{name:"two",age:2},
{name:"three",age:3},
{name:"four",age:4},
{name:"five",age:5},
{name:"six",age:6},
{name:"seven",age:7},
];
var somefour = arrObj.some(function(obj){
    return obj.age>4;//判断age有没有大于4的,如果有返回true,没有返回false
});
var someten = arrObj.some(function(obj){
    return obj.age>10;//判断age有没有大于10的,如果有返回true,没有返回false
});
console.log("判断有没有大于4的:"+somefour);
console.log("判断有没有大于4的:"+someten);
运行结果
  1. arr.every 判断数组中是否所有值都满足需要,返回true/false
"use strict"

var arrObj = [
{name:"one",age:1},
{name:"two",age:2},
{name:"three",age:3},
{name:"four",age:4},
{name:"five",age:5},
{name:"six",age:6},
{name:"seven",age:7},
];

var everyfour = arrObj.every(function(obj){
    return obj>4;
});
var everyten = arrObj.some(function(obj){
    return obj.age>10;//判断age有没有大于10的,如果有返回true,没有返回false
});
console.log("判断是不是所有都大于4:"+everyfour);
console.log("判断是不是所有都大于10:"+everyten);
运行结果

其他的就不试了,有空的时候可以看看这个MDN上的介绍,又一个官方地址Array MDN TODO界面也都挺美的,有空的时候一个一个过一下挺好。

  1. bind/apply/call 都能起到改变this的效果,但还是有一点区别的
    (代码部分来自张鑫旭
"use strict"

function locate(){
  console.log(this.location);
}
function Maru(location){
  this.location = location;
}
var kitty = new Maru("cardboard box");

var locateMaru = locate.bind(kitty);
locateMaru();
//apply和call 立即执行,而bind如果不调用是不执行的
locate.apply(kitty)
locate.call(kitty)

据说看了别人的写出来不贴人家的地址是不好的,那么大家点这里可以看原文哦。

相关文章

网友评论

      本文标题:ES5新特性(严格模式、JSON、Object、Array)

      本文链接:https://www.haomeiwen.com/subject/dpmbfftx.html