zoukankan      html  css  js  c++  java
  • ECMAScript5的新特性

    转自:http://www.cnblogs.com/dolphinX/p/3354319.html,http://www.cnblogs.com/dolphinX/p/3348467.html,http://www.cnblogs.com/dolphinX/p/3353868.html

    总结:1. http://lzw.me/pages/ecmascript/                                   2. https://developer.mozilla.org/zh-CN/docs/Web/JavaScript             es6:http://es6.ruanyifeng.com/#docs/intro

    String.prototype.trim()

    Function.prototype.bind(thisArg,[,arg1[,arg2,…]])

    JSON.parse(text [,reviver])

    JSON.stringify(value [, replacer [, space]])

    Date.now()

    Array.isArray(element),.indexOf(element) / .lastIndexOf(element),.forEach(element,index,array),.every(function(element,index,array)) / .some(function(element,index,array)),.map(function(element)),.filter(function(element)),.reduce(function(v1,v2),value) / .reduceRight(function(v1,v2),value)

    Object.create(prototype[,descriptors])

    Object.defineProperty(O,Prop,descriptor) / Object.defineProperties(O,descriptors)

    Object.getOwnPropertyDescriptor(O,property)

    Object.getOwnPropertyNames

    Object.preventExtensions(O) / Object.isExtensible

    Object.seal(O) / Object.isSealed

    Object.freeze(O) / Object.isFrozen

    ECMAScript5 Array新增方法

     

    数组在各个编程语言中的重要性不言而喻,但是在之前的JavaScript中数组(JavaScript 数组详解)虽然功能已经很强大,但操作方法并不完善,在ECMAScript5中做了适当的补充。

    Array.isArray(element)

    这是Array对象的一个静态函数,用来判断一个对象是不是数组

    var a = new Array(123);
            var b = new Date();
            console.log(Array.isArray(a)); //true
            console.log(Array.isArray(b)); //false

    .indexOf(element) / .lastIndexOf(element)

    顾名思义,这两个方法用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索。

    var a=new Array(1,2,3,3,2,1);
               console.log(a.indexOf(2)); //1
            console.log(a.lastIndexOf(2)); //4

    .forEach(element,index,array)

    遍历数组,参数为一个回调函数,回调函数有三个参数:当前元素,元素索引,整个数组

    var a=new Array(1,2,3,4,5,6);
            a.forEach(function(e,i,array){
                array[i]=e+1;
                });
               console.log(a); //[2, 3, 4, 5, 6, 7]

    .every(function(element,index,array)) / .some(function(element,index,array))

    这两个函数类似于离散数学中的逻辑判定,回调函数返回一个布尔值,every是“所有”函数的每个回调函数都返回true的时候才会返回true,当遇到false的时候终止执行,返回false;some函数是“存在”有一个回调函数返回true的时候终止执行并返回true,否则返回false。在空数组上调用every返回true,some返回false。

    复制代码
    var a=new Array(1,2,3,4,5,6);
            /*0 : 1 
            1 : 2
            2 : 3
            3 : 4 
            4 : 5 
            false */
            console.log(a.every(function(e,i,arr){
                console.log(i+' : '+e);
                return e<5;
                }));
    复制代码
    复制代码
    var a=new Array(1,2,3,4,5,6);
            /*0 : 1 
            1 : 2
            2 : 3
            3 : 4 
            4 : 5 
            true */
            console.log(a.some(function(e,i,arr){
                console.log(i+' : '+e);
                return e>4;
                }));
    复制代码

    .map(function(element))

    与forEach类似,遍历数组,回调函数返回值组成一个新数组返回,新数组索引结构和原数组一致,原数组不变

    var a=new Array(1,2,3,4,5,6);
            console.log(a.map(function(e){
                return e*e;
                })); // [1, 4, 9, 16, 25, 36] 
            console.log(a); //[1, 2, 3, 4, 5, 6]

    .filter(function(element))

    返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加,新数组只包含返回true的值,索引缺失的不包括,原数组保持不变

    var a=new Array(1,2,3,4,5,6);
            console.log(a.filter(function(e){
                return e%2==0;
                })); // [2, 4, 6] 
            console.log(a); //[1, 2, 3, 4, 5, 6]

    .reduce(function(v1,v2),value) / .reduceRight(function(v1,v2),value)

    遍历数组,调用回调函数,将数组元素组合成一个值,reduce从索引最小值开始,reduceRight反向,方法有两个参数

    1.回调函数:把两个值合为一个,返回结果

    2.value,一个初始值,可选

    复制代码
    var a=new Array(1,2,3,4,5,6);
            console.log(a.reduce(function(v1,v2){
                return v1+v2;
                })); // 21
    
                console.log(a.reduceRight(function(v1,v2){
                    return v1-v2;
                    },100)); // 79
    复制代码
     
     

    虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都或多或少的支持了ECMAScript5的新特性,其中重中之重自然是一切对象的基类型——Object

    Object.create(prototype[,descriptors])

    这个方法用于创建一个对象,并把其prototype属性赋值为第一个参数,同时可以设置多个descriptors,关于decriptor下一个方法就会介绍这里先不说。只需要这样就可以创建一个原型链干净对象了

    复制代码
    var o = Object.create({
                "say": function () {
                    alert(this.name);
                },
                "name":"Byron"
            });
    复制代码

    image

    Object.defineProperty(O,Prop,descriptor) / Object.defineProperties(O,descriptors)

    想明白这两个函数必须明白descriptor是什么,在之前的JavaScript中对象字段是对象属性,是一个键值对,而在ECMAScript5中引入property,property有几个特征

    1. value:值,默认是undefined

    2. writable:是否是只读property,默认是false,有点像C#中的const

    3. enumerable:是否可以被枚举(for in),默认false

    4. configurable:是否可以被删除,默认false

    同样可以像C#、Java一样些get/set,不过这两个不能和value、writable同时使用

    5.get:返回property的值得方法,默认是undefined

    6.set:为property设置值的方法,默认是undefined

    复制代码
    Object.defineProperty(o,'age', {
                value: 24,
                writable: true,
                enumerable: true,
                configurable: true
            });
    
            Object.defineProperty(o, 'sex', {
                value: 'male',
                writable: false,
                enumerable: false,
                configurable: false
            });
    
            console.log(o.age); //24
            o.age = 25;
    
            for (var obj in o) {
                console.log(obj + ' : ' + o[obj]);
                /*
                age : 25  //没有把sex : male 遍历出来
                say : function () {
                    alert(this.name);
                } 
                name : Byron 
                */
            }
            delete o.age;
            console.log(o.age);//undefined 
    
            console.log(o.sex); //male
            //o.sex = 'female'; //Cannot assign to read only property 'sex' of #<Object> 
            delete o.age; 
            console.log(o.sex); //male ,并没有被删除
    复制代码

    也可以使用defineProperties方法同时定义多个property,

    复制代码
    Object.defineProperties(o, {
                'age': {
                    value: 24,
                    writable: true,
                    enumerable: true,
                    configurable: true
                },
                'sex': {
                    value: 'male',
                    writable: false,
                    enumerable: false,
                    configurable: false
                }
            });
    复制代码

    Object.getOwnPropertyDescriptor(O,property)

    这个方法用于获取defineProperty方法设置的property 特性

    var props = Object.getOwnPropertyDescriptor(o, 'age');
            console.log(props); //Object {value: 24, writable: true, enumerable: true, configurable: true}

    Object.getOwnPropertyNames

    获取所有的属性名,不包括prototy中的属性,返回一个数组

    console.log(Object.getOwnPropertyNames(o)); //["age", "sex"]

    例子中可以看到prototype中的name属性没有获取到

    Object.keys()

    和getOwnPropertyNames方法类似,但是获取所有的可枚举的属性,返回一个数组

    console.log(Object.keys(o)); //["age"]

    上面例子可以看出不可枚举的sex都没有获取的到

    Object.preventExtensions(O) / Object.isExtensible

    方法用于锁住对象属性,使其不能够拓展,也就是不能增加新的属性,但是属性的值仍然可以更改,也可以把属性删除,Object.isExtensible用于判断对象是否可以被拓展

    复制代码
    console.log(Object.isExtensible(o)); //true
            o.lastName = 'Sun';
            console.log(o.lastName); //Sun ,此时对象可以拓展
    
            Object.preventExtensions(o);
            console.log(Object.isExtensible(o)); //false
    
            o.lastName = "ByronSun";
            console.log(o.lastName); //ByronSun,属性值仍然可以修改
    
            //delete o.lastName;
            console.log(o.lastName); //undefined仍可删除属性
    
             o.firstname = 'Byron'; //Can't add property firstname, object is not extensible 不能够添加属性
    复制代码

    Object.seal(O) / Object.isSealed

    方法用于把对象密封,也就是让对象既不可以拓展也不可以删除属性(把每个属性的configurable设为false),单数属性值仍然可以修改,Object.isSealed由于判断对象是否被密封

    Object.seal(o);
            o.age = 25; //仍然可以修改
            delete o.age; //Cannot delete property 'age' of #<Object>

    Object.freeze(O) / Object.isFrozen

    终极神器,完全冻结对象,在seal的基础上,属性值也不可以修改(每个属性的wirtable也被设为false)

    Object.freeze(o);
            o.age = 25; //Cannot assign to read only property 'age' of #<Object>

    最后

    上面的代码都是在Chrome 29下一严格模式(’use strict’)运行的,而且提到的方法都是Object的静态函数,也就是在使用的时候应该是Object.xxx(x),而不能以对象实例来调用。总体来说ES5添加的这些方法为javaScript面向对象设计提供了进一步的可配置性,用起来感觉很不错。

     

    ECMAScript5的其它新特性

     

    之前两篇博客 ECMAScript5 Object的新属性方法ECMAScript5 Array新增方法,分别介绍了ECMAScript5对Object和Array的拓展,这两个对象最常用,而且改动比较多,剩下的对象拓展比较少

    String.prototype.trim()

    这是字符串的一个实例方法,用于去除字符串首尾的空白符(不只是空格,还有tab、垂直制表符啊神马的)和换行符,终于不用自己用正则表达式写了,这个方法返回trim后结果,不改变原字符串值

    复制代码
    var s = '    123 
    ';
            console.log(s.length);//6
            console.log(s.trim());//123
            console.log(s.trim().length);//3
            console.log(s); //    123 
            console.log(s.length); //6
    复制代码

    Function.prototype.bind(thisArg,[,arg1[,arg2,…]])

    Function.prototype.bind返回一个把内部this设为thisArg的方法,读起来很绕,其实就是,返回一个新方法,这个方法内部的this是参数thisArg

    <div id="test">Click Here</div>
    复制代码
    var handler = {
                message: 'This is a test',
                click: function () {
                    alert(this.message);
                }
            };
    复制代码
    document.getElementById('test').onclick = handler.click;

    如果这样绑定div的click事件处理程序,大家都会看出来,点击的时候弹出来的对话框内容是undefined,因为执行的时候this是window,我们需要一定的技巧才可以处理此事,达到预期效果,但是使用新添的bind我们可以轻松改变this

    document.getElementById('test').onclick = handler.click.bind(handler);

    这样就可以达到我们预期效果了。

     

    ECMAScript提供了一个全局的对象JSON,用来处理json的序列化和反序列化来实现类似于json2.js中的效果,内置的函数总比我们自己写的要效率高一些

    JSON.parse(text [,reviver])

    JSON.parse用于反序列化json格式字符串为对象,第二个参数是可选的,是一个有key和value两个参数的函数,用于过滤或者处理返回值

    var jsonString = '{"name":"Byron", "age":24}';
            var jsonObj = JSON.parse(jsonString);
            console.log(typeof jsonObj); //Object
            console.log(jsonObj.name); //Byron

    对一些复杂的嵌套结构也能够胜任

    var jsonString = '[{"name":"Byron", "age":24,"Books":{"B1":"Love","B2":"Good"}},{"name":"Byron", "age":24,"Books":{"B1":"Love","B2":"Good"}}]';
            var jsonObj = JSON.parse(jsonString);

    image

    复制代码
    var jsonString = '{"name":"Byron", "age":24}';
    
            var jsonObj = JSON.parse(jsonString, function (key, value) {
                if (typeof value == 'string') {
                    return value.toUpperCase();
                } else {
                    return value;
                }
            });
            console.log(jsonObj.name); //BYRON
    复制代码

    JSON.stringify(value [, replacer [, space]])

    JSON.stringify方法用于序列化json对象为字符串,最简单的就是传入一个json对象

    复制代码
    var jsonObj = {
                "name": "Byron",
                "BirthDate": new Date('06/15/1989')
            };
            var jsonStr=JSON.stringify(jsonObj);
            console.log(jsonStr); // {"name":"Byron","BirthDate":"1989-06-14T16:00:00.000Z"}
    复制代码

    可以看到在序列化Date对象的时候调用了其toJson方法,replacer是一个可选参数,有两种情况,可以使方法或数组

    方法:这个貌似很好理解,方法也有key和value两个参数,在序列化过程中对数据进行处理,顺便说说第三个参数space,这是一个分隔符,表示用什么区分开对象的每项内容,省略的话就没有,向上面那样是一句;数字表示所及几个字符,大于10的按10处理;普通字符串就是把字符串附加,最大长度也是10;号可以使用 等转移字符

    复制代码
    var jsonObj = {
                "name": "Byron",
                "BirthDate": new Date('06/15/1989')
            };
            var jsonStr = JSON.stringify(jsonObj, function (key, value) {
                if (typeof value == 'string') {
                    return value.toUpperCase();
                } else {
                    return value;
                }
             },'	');
            console.log(jsonStr);
            /*{
                "name": "BYRON",
                "BirthDate": "1989-06-14T16:00:00.000Z"
            } */
    复制代码

    数组:主要起一个过滤作用,只会序列化对象中属性名存在于数组元素的键值对

    复制代码
    var jsonObj = {
                "name": "Byron",
                "BirthDate": new Date('06/15/1989'),
                "age":24,
                "sex":"male"
            };
            var arr = ['name', 'age'];
            var jsonStr = JSON.stringify(jsonObj,arr,3);
            console.log(jsonStr);
            /*{
                "name": "BYRON",
                "age": 24
            } */
    复制代码

    BirthDate和sex属性不在数组arr中,没有被序列化

    支持ISO类型的Date

    在之前的JavaScript中可以使用以下几种方式创建Date实例

    new Date() //Date {Fri Aug 02 2013 16:50:33 GMT+0800 (China Standard Time)}
            new Date(milliseconds)  //Date {Fri Aug 02 2013 16:53:26 GMT+0800 (China Standard Time)}
            new Date("2013/08/02") //Date {Fri Aug 02 2013 00:00:00 GMT+0800 (China Standard Time)}
            new Date("08/02/2013") //Date {Fri Aug 02 2013 00:00:00 GMT+0800 (China Standard Time)}
            new Date(year, month, day, hours, minutes, seconds, ms)

    ECMAScript5为其添加了ISO-8601格式的支持,可以为构造函数传一个ISO格式时间字符串

    console.log(new Date("1970-01-01T00:00:00.000Z")); //Thu Jan 01 1970 08:00:00 GMT+0800 (China Standard Time)

    同时添加了一个toISOString方法

    console.log(new Date().toISOString()); // 2013-10-07T05:54:38.743Z

    Date.prototype.toJSON()

    从Date类型转成json的方法,序列化的时候用

    console.log((new Date).toJSON()); // 2013-10-07T06:06:29.288Z

    Date.now()

    获取当前的时间戳

    console.log(Date.now()); // 1381125894410

<div class="post"><h1 class="postTitle"><a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/dolphinX/p/3353868.html">ECMAScript5 Array新增方法</a></h1><div class="clear"></div><div class="postBody"><div id="cnblogs_post_body"><p>数组在各个编程语言中的重要性不言而喻,但是在之前的JavaScript中数组(<a href="http://www.cnblogs.com/dolphinX/p/3353590.html" target="_blank">JavaScript 数组详解</a>)虽然功能已经很强大,但操作方法并不完善,在ECMAScript5中做了适当的补充。</p><h3>Array.isArray(element)</h3><p>这是Array对象的一个静态函数,用来判断一个对象是不是数组</p><div class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><pre><span style="color: #0000ff;">var</span> a = <span style="color: #0000ff;">new</span> Array(123<span style="color: #000000;">);        </span><span style="color: #0000ff;">var</span> b = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Date();        console.log(Array.isArray(a)); </span><span style="color: #008000;">//</span><span style="color: #008000;">true</span>        console.log(Array.isArray(b)); <span style="color: #008000;">//</span><span style="color: #008000;">false</span></pre></div><h3>.indexOf(element) / .lastIndexOf(element)</h3><p>顾名思义,这两个方法用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索。</p><div class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><pre><span style="color: #0000ff;">var</span> a=<span style="color: #0000ff;">new</span> Array(1,2,3,3,2,1<span style="color: #000000;">);           console.log(a.indexOf(</span>2)); <span style="color: #008000;">//</span><span style="color: #008000;">1</span>        console.log(a.lastIndexOf(2)); <span style="color: #008000;">//</span><span style="color: #008000;">4</span></pre></div><h3>.forEach(element,index,array)</h3><p>遍历数组,参数为一个回调函数,回调函数有三个参数:当前元素,元素索引,整个数组</p><div class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><pre><span style="color: #0000ff;">var</span> a=<span style="color: #0000ff;">new</span> Array(1,2,3,4,5,6<span style="color: #000000;">);        a.forEach(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e,i,array){            array[i]</span>=e+1<span style="color: #000000;">;            });           console.log(a); </span><span style="color: #008000;">//</span><span style="color: #008000;">[2, 3, 4, 5, 6, 7]</span></pre></div><h3>.every(function(element,index,array)) / .some(function(element,index,array))</h3><p>这两个函数类似于离散数学中的逻辑判定,回调函数返回一个布尔值,every是“所有”函数的每个回调函数都返回true的时候才会返回true,当遇到false的时候终止执行,返回false;some函数是“存在”有一个回调函数返回true的时候终止执行并返回true,否则返回false。在空数组上调用every返回true,some返回false。</p><div class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><pre><span style="color: #0000ff;">var</span> a=<span style="color: #0000ff;">new</span> Array(1,2,3,4,5,6<span style="color: #000000;">);        </span><span style="color: #008000;">/*</span><span style="color: #008000;">0 : 1         1 : 2        2 : 3        3 : 4         4 : 5         false </span><span style="color: #008000;">*/</span><span style="color: #000000;">        console.log(a.every(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e,i,arr){            console.log(i</span>+' : '+<span style="color: #000000;">e);            </span><span style="color: #0000ff;">return</span> e&lt;5<span style="color: #000000;">;            }));</span></pre><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><div class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><pre><span style="color: #0000ff;">var</span> a=<span style="color: #0000ff;">new</span> Array(1,2,3,4,5,6<span style="color: #000000;">);        </span><span style="color: #008000;">/*</span><span style="color: #008000;">0 : 1         1 : 2        2 : 3        3 : 4         4 : 5         true </span><span style="color: #008000;">*/</span><span style="color: #000000;">        console.log(a.some(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e,i,arr){            console.log(i</span>+' : '+<span style="color: #000000;">e);            </span><span style="color: #0000ff;">return</span> e&gt;4<span style="color: #000000;">;            }));</span></pre><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div><h3>.map(function(element))</h3><p>与forEach类似,遍历数组,回调函数返回值组成一个新数组返回,新数组索引结构和原数组一致,原数组不变</p><div class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><pre><span style="color: #0000ff;">var</span> a=<span style="color: #0000ff;">new</span> Array(1,2,3,4,5,6<span style="color: #000000;">);        console.log(a.map(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e){            </span><span style="color: #0000ff;">return</span> e*<span style="color: #000000;">e;            })); </span><span style="color: #008000;">//</span><span style="color: #008000;"> [1, 4, 9, 16, 25, 36] </span>        console.log(a); <span style="color: #008000;">//</span><span style="color: #008000;">[1, 2, 3, 4, 5, 6]</span></pre></div><h3>.filter(function(element))</h3><p>返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加,新数组只包含返回true的值,索引缺失的不包括,原数组保持不变</p><div class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><pre><span style="color: #0000ff;">var</span> a=<span style="color: #0000ff;">new</span> Array(1,2,3,4,5,6<span style="color: #000000;">);        console.log(a.filter(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(e){            </span><span style="color: #0000ff;">return</span> e%2==0<span style="color: #000000;">;            })); </span><span style="color: #008000;">//</span><span style="color: #008000;"> [2, 4, 6] </span>        console.log(a); <span style="color: #008000;">//</span><span style="color: #008000;">[1, 2, 3, 4, 5, 6]</span></pre></div><h3>.reduce(function(v1,v2),value) / .reduceRight(function(v1,v2),value)</h3><p>遍历数组,调用回调函数,将数组元素组合成一个值,reduce从索引最小值开始,reduceRight反向,方法有两个参数</p><p>1.回调函数:把两个值合为一个,返回结果</p><p>2.value,一个初始值,可选</p><div class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div><pre><span style="color: #0000ff;">var</span> a=<span style="color: #0000ff;">new</span> Array(1,2,3,4,5,6<span style="color: #000000;">);        console.log(a.reduce(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(v1,v2){            </span><span style="color: #0000ff;">return</span> v1+<span style="color: #000000;">v2;            })); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 21</span><span style="color: #000000;">            console.log(a.reduceRight(</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(v1,v2){                </span><span style="color: #0000ff;">return</span> v1-<span style="color: #000000;">v2;                },</span>100)); <span style="color: #008000;">//</span><span style="color: #008000;"> 79</span></pre><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div></div><div id="MySignature"></div><div class="clear"></div><div id="blog_post_info_block"><div id="BlogPostCategory">分类: <a href="http://www.cnblogs.com/dolphinX/category/519616.html" target="_blank">ECMAScript5</a></div><div id="EntryTag"></div><div id="blog_post_info"><div id="green_channel">        <a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(3353868,cb_blogId,1);green_channel_success(this,'谢谢推荐!');">好文要顶</a>            <a id="green_channel_follow" onclick="follow('0c473040-b30a-e111-b7b9-842b2b196315');" href="javascript:void(0);">关注我</a>    <a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>    <a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="//common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>    <a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="//common.cnblogs.com/images/wechat.png" alt=""></a></div><div id="author_profile">    <div id="author_profile_info" class="author_profile_info">            <a href="http://home.cnblogs.com/u/dolphinX/" target="_blank"><img src="//pic.cnblogs.com/face/349217/20170112205800.png" class="author_avatar" alt=""></a>        <div id="author_profile_detail" class="author_profile_info">            <a href="http://home.cnblogs.com/u/dolphinX/">撒玛利亚人</a><br>            <a href="http://home.cnblogs.com/u/dolphinX/followees">关注 - 12</a><br>            <a href="http://home.cnblogs.com/u/dolphinX/followers">粉丝 - 2887</a>        </div>    </div>    <div class="clear"></div>    <div id="author_profile_honor"></div>    <div id="author_profile_follow">                <a href="javascript:void(0);" onclick="follow('0c473040-b30a-e111-b7b9-842b2b196315');return false;">+加关注</a>    </div></div><div id="div_digg">    <div class="diggit" onclick="votePost(3353868,'Digg')">        <span class="diggnum" id="digg_count">5</span>    </div>    <div class="buryit" onclick="votePost(3353868,'Bury')">        <span class="burynum" id="bury_count">0</span>    </div>    <div class="clear"></div>    <div class="diggword" id="digg_tips">    </div></div></div><div class="clear"></div><div id="post_next_prev"><a href="http://www.cnblogs.com/dolphinX/p/3354318.html" class="p_n_p_prefix">« </a> 上一篇:<a href="http://www.cnblogs.com/dolphinX/p/3354318.html" title="发布于2013-10-11 21:43">querySelector和querySelectorAll</a><br><a href="http://www.cnblogs.com/dolphinX/p/3354319.html" class="p_n_p_prefix">» </a> 下一篇:<a href="http://www.cnblogs.com/dolphinX/p/3354319.html" title="发布于2013-10-15 08:45">ECMAScript5的其它新特性</a><br></div></div>

</div><div class="postDesc">posted @ <span id="post-date">2013-10-14 17:32</span> <a href="http://www.cnblogs.com/dolphinX/">撒玛利亚人</a> 阅读(<span id="post_view_count">3860</span>) 评论(<span id="post_comment_count">6</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=3353868" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(3353868);return false;">收藏</a></div></div>

查看全文
  • 相关阅读:
    java操作docker示例(docker-java)
    istio实现对外暴露服务
    istio实现自动sidecar自动注入(k8s1.13.3+istio1.1.1)
    k8s1.13.3安装istio(helm方式)
    wrk http压测工具介绍
    etcd 相关介绍
    openresty 常用API学习
    Lua 相关知识点
    Lua 获取table的长度
    Lua 字符串相关操作
  • 原文地址:https://www.cnblogs.com/poorpeople/p/6699911.html
  • Copyright © 2011-2022 走看看