ES5的一些新鲜玩意儿

 一.解析JSON

 JSON.parse()能够把JSON格式的文本转换成ECMAScript值(对象或者数组)。

语法:JSON.parse(text[,revier])   ————参数 text表示一个有效的JSON字符串,最后返回的是一个对象或者数组。

var jsontext='{"name":"张三","qq":"11111","phone":["010-666666","010-777777"]}';  //JSON字符串
		var contact=JSON.parse(jsontext);    //JSON.parse()方法
		document.write(contact.name+","+contact.qq+","+contact.phone[1]);   //张三,11111,010-777777

来说下,revier这个参数函数常见的作用吧,一般用来过滤,可选参数revier是一个带有key,value两个参数的函数,其作用于结果,让过滤和转换返回值成为可能,则先于父对象转换嵌套对象。值得注意的是,如果函数返回的是一个null或者undefined,则删除成员。

		var n='{"a":"1.5","b":"2.3"}';  //JSON字符串
		var result=JSON.parse(n,int);    //JSON.parse方法,有两个参数,一个为json字符串,一个为reviver参数函数
		document.write(result.a);
		function int(key,value){      // reviver参数函数

			if(typeof value =='string'){  //取出每一个对象的value,进行操作
				return parseInt(value);
			}
			else {
				return value;
			}
		}   //输出结果为1;

二.序列化JSON

JSON.stringify()函数能够将JS值转换为JSON字符串。

JSON.stringify(value[,replace][,space]) ————value为要转换的JS值,通常为对象或者数组。  replace为用于转换结果的函数或者数组。space为格式。

值得注意的是:replace为函数时,JSON.stringify()将调用该函数,并传入每个成员的建和值,使用的是返回值而不是原值。如果函数返回的是undefined,则排除该成员/

replace为数组,则仅转换该数组中具有键值的成员,当value也为数组时,将忽略replace数组。

                var arr=["a","b","c"];  //数组
		var str=JSON.stringify(arr);    //调用JSON.stringify()方法,转化为JSON字符串
		document.write(str);
		document.write("<br/>");


		var newArr =JSON.parse(str);    //调用JSON.parse()方法,重新转化为JS数组,并输出。
		while(newArr.length>0){
			document.write(newArr.pop()+"<br/>");
		}

再来看看,JSON.stringify()有第二个参数并且为函数的情况。

     var nums={
			"first":7,
			"second":14,
			"third":13
		}
		var luckyNums =JSON.stringify(nums,replacer);  
		document.write(luckyNums);
		function replacer(key,value){   //replacer为参数函数,目的是过滤原数组中的成员。
			if(value==13){
				return undefined;   //返回undefined ,移除该成员   
			}
			else{
				return value;
			}

		}   //输出  {"first":7,"second":14}

再来看一个第二个参数为数组的情况下。

                var nums={
			"first":"HUHUI",
			"second":"is",
			"third":"coder"
		}
		var replacer=["first"];  //第二个参数为数组,只有该数组中具有键值的成员,才能输出。
		var luckyNums =JSON.stringify(nums,replacer);
	    document.write(luckyNums);  //{"first":"HUHUI"}

三.Object

1.创建对象:

     Object.create(prototype,descriptpors)   ——prototype:必需参数,要作原型的对象,可以为null。descriptpors:可选参数,包含一个或多个属性描述符的JS对象。

     

 var newObj = Object.create(null,{   //var 一个新对象,使用create这个方法,第一个参数为指定原型对象,此处为null。第二个参数为一个或多个属性描述符的JS对象,value是作为描述符出现的
        size:{
            value:"larger",
            enumerable:true
        },
        shpae:{
            value:"round",
            enumerable:true
        }
    });
    document.write(newObj.size +"<br/>")
    document.write(newObj.shape +"<br/>")
    document.write(Object.getPrototypeOf(newObj) +"<br/>");  //larger
// undefined
// null

    2.定义属性:

  Object.defineProperty(object,properyname,descriptor)  ——object:必需参数,指定要添加或修改属性的对象。properyname:必需参数,表示一个包含属性名称的字符。descriptor:必需属性,定义属性的描述符。

Object.defineProperty()的返回值为已修改的对象。

和Object.defineProperties()

 var obj={};  //创建一个新的空对象  
   Object.defineProperty(obj,"newDataProperty",{     //使用Object.defineProperty定义属性
       value:101,
       writable:true,
       enumerable:true,
       configurable:true
   });
   document.write(obj.newDataProperty +"<br/>");  //101
   obj.newDataProperty=102;   // /修改属性
   document.write(obj.newDataProperty);   //102

3.访问属性:

   Object.getPrototype(object)  ——参数object表示指定的对象,返回值是参数object的原型对象。

Object.getOwnPropertyNames(object) ——返回对象私有的属性名称,而不是从原型链上继承的。参数object表示一个对象,返回的是一个数组。


function Pasta(grain,width,shape) {  //定义一个构造函数 
      this.grain=grain;
      this.width=width;
      this.shape=shape;
      this.toStirng =function(){
          return (this.grain+","+this.width+","+this.shape);
      }
    }
    var spaghetti = new Pasta("wheat",0.2,"circle");   //使用构造函数,new一个对象
    var arr=Object.getOwnPropertyNames(spaghetti);  //使用Object.getOwnPropertyNames(),获取它的原生属性。返回的是一个数组。
    document.write(arr +"<br/>");   //grain,width,shape,toStirng
    document.write( arr instanceof Array);  //true

四.Array

  1.定位

  包括indexOf(),lastIndexOf().

array.indexOf(searchElement[,fromIndex]) ——array:表示一个数组对象。searchElement:必需,要在array中定位的值,fromIndex:可选,用于开始搜索的数组索引,如果忽略该参数,则从0开始。

 var array=["ab","cd","ef","cd"];   //创建一哥数组
 document.write(array.indexOf("cd")+"<br/>");  //1
 document.write(array.indexOf("cd",2)+"<br/>");  //3

lastIndexOf(),是从最后一个开始匹配的,用法与indexOf()相同。

2.迭代

    ①.forEach():为数组中每一个元素调用定义的回调函数。

   array.forEach(callbackFn[,thisArg]) ——array:一个数组元素,callbackFn:回调函数,对于数组中的每一个元素,都会执行这个回调,可以有三个参数。thisArg:可选参数,callbackFn函数中的this关键字可引用的对象。如果省略,则undefined会被作为this的值。

function callbackFn(value,index,array)  ——array包含该元素的数组对象。

 var numbers=[10,11,12];  //定义一个数组
 var sum=0;   //定义一个变量,用来计算
 numbers.forEach(   //调用forEach()方法
     function addNum(value) {sum +=value;  }  //执行回调函数 
 );
 document.write(sum)  //33

②.every

  array.every(callackFn[,thisArg]) ——thisArg:一个对象,注意是能在回调函数中为其引用this关键字的对象。

        如果callbackFn所有数组元素返回true,则返回为true,否则为false.

var checkNumRange =function(value){  //定义回调函数
     if(typeof value!=='number')
     return false;
     else 
     return value>=this.minimun&&value<=this.maximum;   //引用this,这个关键字
 }
 var numbers=[10,15,19];   //数组对象
 var obj={minimun:10,maximum:20}   //一个对象,注意是能在回调函数中为其引用this关键字的对象。
 if(numbers.every(checkNumRange,obj))
      document.write("都在指定范围内");
else
    document.write("部分不在指定范围内");    //都在指定范围内

③.some

 array.some(callackFn[,thisArg]) ——thisArg:一个对象,注意是能在回调函数中为其引用this关键字的对象。

  如果找到导致callbackFn返回true的元素,则some()会立即返回true.如果回调不对任何元素返回true,则some()方法会返回false.

function CheckIfEvent(value,index,ar) {
    if(value%2==0)  //判断是否为偶数,如果是返回true
    return true;
}
var numbers=[1,15,25,30,45];
var envens=numbers.some(CheckIfEvent);
if(envens)
document.write("不全是奇数");  //如果有一个返回的是true,那么立即返回true,此时说明有偶数存在。
else 
document.write("全是奇数");

④.map()

   map()方法将返回一个新数组,其中每个元素均为关联的原始数组元素的回调函数返回值。对于数组中的每个元素,map()方法都会调用callbackFn函数一次。map()还可以作用于伪数组。比如arguments.

  function AreaOfCircle(radius) {  //定义回调函数
      var area =Math.PI*(radius*radius);   //计算面积
      return area.toFixed(0);
    }
    var radiu=[10,20,30];  //定义数组
    var area=radiu.map(AreaOfCircle);  //调用map方法
    document.write(area)       //314,1257,2827

⑤.filter()

  返回值是一个包含回调函数为其返回为true的所有值的新数组。如果回调函数的为array的所有元素返回false,那么这个新数组的长度为0.

  function CheckIfPrime(value,index,arr){  //定义判断是否为素数的方法
      high=Math.floor(Math.sqrt(value))+1;
      for(var div=2;div<high;div++){
          if(value%div==0){
              return false;
          }
      }
      return true;  //如果是素数,返回true,即为新数组中的元素
  }
  var numbers=[31,33,35,37,39,41,43,65,98];
  var prims=numbers.filter(CheckIfPrime);
  document.write(prims);

五.Function和String 

 es5为Function增加了一个原型方法bind(Function.prototype.bind),用来把函数绑定在指定对象上。从本质上来说,它允许在其他对象链中执行一个函数。

   也就是说,对于给定的函数,创建具有与原始函数相同的主体的绑定函数,在绑定函数中,this对象将解析为传入的对象。绑定函数具有指定的初始参数。

  function.bind(thisArg[,arg1[.arg2][],arg3])—— function:必需参数,一个函数对象。thisArg:必需参数,this关键字可在新函数中引用的对象。[,arg1[.arg2][],arg3]:可选参数,要传递到新函数的参数的列表。

var checkNumberRange =function(value){  //定义一个函数,判断传入的值,是否在给定的范围内
    if(typeof value !=='number')
    return false;
    else 
      return value>=this.minimum&&value<=this.maximum;
}
var ranger ={minimum:10,maximum:20};  //定义一个对象ranger
var boundCheckNumberRange =checkNumberRange.bind(ranger);  //把checkNumberRange绑定在ranger这个对象上
var result =boundCheckNumberRange(12);   //把函数的引用传递给result
document.write(result)   //true

对于,String,es5新提出了一个删除两边空格的方法。

var string ="   aaa  bbb   ";
var result=string.trim();
document.write(result)   //aaa  bbb  ,注意的是,不能删除中间的空格








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值