085_JS Promise

js对undefined的处理

 https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345008539155e93fc16046d4bb7854943814c4f9dc2000 
 
执行顺序 : 同步语句,微任务(promise ),宏任务(settimeout)

JavaScript 中有两个特殊数据类型:undefined 和 null,先看看 undefined 的判断,欢迎各位同仁交流一番:
第一次碰见undefined的时候,我用的是java那一套,我是这样处理的

  if (obj== undefined){
  /*逻辑*/
 }

事实说明我是自作聪明了,查询之发现,大家通常正确的做法是这样的,

if (typeof(obj) == "undefined") { 
   /*逻辑*/ 
}   

为什么会这样的呢?js怎么会多出这样一种数据类型呢?undefined是怎样一种存在呢?接下来就走进科学吧,

大多数计算机语言,有且仅有一个表示"无"的值,比如,用过可知C语言的NULL,Java语言的null,查询可知Python语言的None,Ruby语言的nil,但是javascript是不一样的烟火,它有两个表示"无"的值:undefined和null。这是为什么?

1,历史的行程

1995年JavaScript诞生时如早一年的Java一样,用null作为表示"无"的值。根据C语言的传统,null被设计成可以自动转为0,设计Brendan Eich觉得这样做还不够,因为,null在Java里被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示"无"的值最好不是对象。其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。因此,Brendan Eich又设计了一个undefined。

2.关于undefined

undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性,函数没有返回值时,默认返回undefined。这是undefined的几种典型用法,而判断一个变量是不是undefined,用typeof函数,typeof函数主要是返回的是字符串,主要这么几种:"number"、"string"、"boolean"、"object"、"function"、"undefined"

 

注释:null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。

 

 

 

new Promise(function (resolve, reject) {
    log('start new Promise...');
    var timeOut = Math.random() * 2;
    log('set timeout to: ' + timeOut + ' seconds.');
    setTimeout(function () {
        if (timeOut < 1) {
            log('call resolve()...');
            resolve('200 OK');
        }
        else {
            log('call reject()...');
            reject('timeout in ' + timeOut + ' seconds.');
        }
    }, timeOut * 1000);
}).then(function (r) {
    log('Done: ' + r);
}).catch(function (reason) {
    log('Failed: ' + reason);
});

 

var result = sforce.connection.query("Select Name,Id from User", {
    onSuccess : function(result) {
        var records = result.getArray("records");
        for (var i=0; i<records.length; i++) {
            var record = records[i];
        log(record.Name + " -- " + record.Id);
        }
    },
    onFailure : function(error) {
        log("An error has occurred " + error);
        }
    }
);

 

javascript : instanceof和typeof的区别:

 instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量。

     typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错,对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。

     如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。instanceof用于判断一个变量是否某个对象的实例,如var a=new Array();alert(a instanceof Array);会返回true,同时alert(a instanceof Object)也会返回true;这是因为Array是object的子类。再如:function test(){};var a=new test();alert(a instanceof test)会返回true。

     谈到instanceof我们要多插入一个问题,就是function的arguments,我们大家也许都认为arguments是一个Array,但如果使用instaceof去测试会发现arguments不是一个Array对象,尽管看起来很像。

另外:

测试 var a=new Array();if (a instanceof Object) alert('Y');else alert('N');
得'Y’

但 if (window instanceof Object) alert('Y');else alert('N');

得'N'

所以,这里的instanceof测试的object是指js语法中的object,不是指dom模型对象。

使用typeof会有些区别
alert(typeof(window) 会得 object

 

**************************************************************************

async/await 和 promise 的执行顺序 - 掘金 (juejin.cn)

const promise = new Promise((resolve, reject) => {
setTimeout(() => {
this[NavigationMixin.Navigate]({
type: 'standard__webPage',
attributes: {
url: this.url + 'Information__c/new'
}
}
// Replaces the current page in your browser history with the URL
);

resolve('success!');
}, 0);
});

promise.then((result) => {


this[NavigationMixin.Navigate]({
type: 'standard__recordPage',
attributes: {
recordId: this.currentId,
objectApiName: 'Information__c',
actionName: 'view'
},

}, true
);


})


async connectedCallback() {
await Promise.resolve();
let apexResults = await Promise.all([ method1(params), method2(params) ])
// Do something with results
}

posted @ 2019-04-01 15:44  BandariFang  阅读(234)  评论(0编辑  收藏  举报