JavaScript 学习随记

由于Array也是对象,而它的每个元素的索引被视为对象的属性,因此,for ... in循环可以直接循环出Array的索引:

var a = ['A', 'B', 'C'];
for (var i in a) {
    console.log(i); // '0', '1', '2'
    console.log(a[i]); // 'A', 'B', 'C'
}

请注意for ... inArray的循环得到的是String而不是Number


贪婪匹配

需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的0

var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']

由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。

必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:

var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']

 

'use strict';

var logging = document.getElementById('test-promise2-log');
while (logging.children.length > 1) {
    logging.removeChild(logging.children[logging.children.length - 1]);
}

function log(s) {
    var p = document.createElement('p');
    p.innerHTML = s;
    logging.appendChild(p);
}

// 0.5秒后返回input*input的计算结果:
function multiply(input) {
    return new Promise(function (resolve, reject) {
        log('calculating ' + input + ' x ' + input + '...');
        if(input === 'undefined')
            reject('undefined');
        if(isNaN(input))
            reject('NaN');
        if(input > 0)
            setTimeout(resolve, 500, input * input);
        else
            reject('less than 0');        
    });
}

// 0.5秒后返回input+input的计算结果:
function add(input) {
    return new Promise(function (resolve, reject) {
        log('calculating ' + input + ' + ' + input + '...');
        if(input === 'undefined')
            reject('undefined');
        if(isNaN(input))
            reject('NaN');
        setTimeout(resolve, 500, input + input);
    });
}

var p = new Promise(function (resolve, reject) {
    log('start new Promise...');
    resolve(-1);
});

p.then(multiply).catch(function (r) {log('Error: ' + r);})
 .then(add).catch(function (r) {log('Error: ' + r);})
 .then(multiply).catch(function (r) {log('Error: ' + r);})
 .then(add).catch(function (r) {log('Error: ' + r);})
 .then(function (result) {
    log('Got value: ' + result);
});
Log:

start new Promise...

calculating -1 x -1...

Error: less than 0

calculating undefined + undefined...

Error: NaN

calculating undefined x undefined...

Error: NaN

calculating undefined + undefined...

Error: NaN

Got value: undefined

catch之后依旧会往下执行 

如果p用1初始化,直接忽略所有catch

Log:

start new Promise...

calculating 1 x 1...

calculating 1 + 1...

calculating 2 x 2...

calculating 4 + 4...

Got value: 8

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值