• 《你不知道的JavaScript》中卷 KYLE SIMPSON 著 单业 姜南 译


    一部分  类型和语法

    1.内置类型(7)

    null、undefined、boolean、number、string、object、symbol(ES6新增,符号)

    2.toString()和Json.stringify()

    (1)字符串、数字、布尔值和null的JSON.stringify()规则与toString基本相同

    (2)如果传递给JSON.stringify()对象中定义了toJSON()方法,那么该方法会在字符串化前调用,以便将对象转换为安全的JSON值。

    3.a+''会对a调用valueOf()方法,String(a)则是调用toString()方法。

    4.'44'==true;   //false  原因把bool转换为number,'44'==true    ==>    '44'==1   ==>   44==1;   //false

    5.""==0;//true      ""==[];//true     0==[];//true
    注:(1)如果两边的值中有true或false(2)如果两边的值中有[]   ""  或者  0,尽量不要使用==,可用===来避免不经意的强制类型转换。

    6.var a={b:42};    var b={b:43};

    a<b;//false   a==b;//false   a>b;//false   a>=b;//true  a<=b;//true

    a.b被转化为[object  object],          a>=b  ==>  !(a<b)    ==>  true

    7.var a=42;    a++;//42  a;//43   ++a;//44   a;//44

    8.运算符优先级 :  && > || > ?:

    9.左关联:  &&  ||

    10.右关联: ?:    =  

    eg1(三目运算):  true?false:true?true:true;// false        true?false:(true?true:true);//false    (true?false:true)?true:true;// true      //说明三目运算是右关联

    eg2(赋值): var a,b,c;    a=b=c=42;   //首先执行c=42,然后b=...,最后a=...;

    二次阅读:

    第一部分:类型和语法

    第一章:类型

    1.JavaScript的七种内置类型:null/undefined/string/number/boolean/object/symbol(es6新增)

    (除对象为基本类型)

    2.typeof可检测:undefined/string/number/boolean/stymbol

    3.null 检测:var a=null ;   !a && typeof a ==‘object’

    4.function是object的‘子类型’

     

     

    第二章。值

    1.类数组转化为数组:var arr=Array.prototype.slice.call(arguments);或 var arr=Array.from(arguments);

    2.   0.1+0.2;//0.30000000000000004   .1+.2===.3;//false

         判断方法,设置一个误差范围值:机器精度2^-52 Math.EPSILON.    Math.abs(.1+.2-.3)<Number.EPSILON;//true

    3.void 返回值是undefined

    4.NaN说js中唯一一个不等于自身的值:

    if(!Number.NaN){

    Number.NaN=function(n){

    return n!=n;

    }

    }

    5.Object.is(NaN,NaN);//true. Object.is(0,-0);//false.     注:能用==或===就别用Object.is(其效率不高)

     

     

    第三章。原生函数

    1.常用原生函数(内建函数):String()/Number()/Boolean()/Object()/Array()/Function()/RegExp()/Date()/Error()/Symbol()(es6新加)

      注:Date要带New关键词,Symbol不带new关键词,其他可不带new关键词

    2.Object.protyotype.toString.call()比typeof管用还可以判断null/Undefined,eg:Object.prototype.toString.call(null);//"[object Null]"

     

     

    第四章  强制类型转换

    1.关于JSON:(1)undefined/function/symbol和包含循环引用(对象间相互引用形成无限循环)的对象都不符合JSON结构标准

    (2)JSON.stringify(…)在对象中遇到undefined/function/symbol会自动将其忽略;在数组中会返回null(以保证单元位置不变)。

    2.toJSON()返回一个能够被字符串话的安全的JSON值,而不是JSON字符串。

    3.转化为Boolean(或!!):假值:undefined/null/false/+0/-0/NaN/‘’,除此之外都为true

    4.+的隐士转换:eg:(1).    +’3’;//3.    1 +’3’;//4.    (2).   +new Date();//时间搓。   es5:Date.now();//当前时间戳

    5.~x等同于-(x+1);    eg:var a=‘hello’;  ~a.indexOf(’00’);//-0(即为false,其他为true可用判断) 

    6.var a=’42px’;   Number(a);//NaN.   parseInt(a);//42

    7.parseInt()的第二个参数是进制,eg:parseInt(55,10)

    8.var a=[3],b=[2];  a-b;//1    -运算类似于+。 字符串转为数字

    9.符号不能被强制转化数字(隐式显式都不行),但可以转化为布尔(隐式显式都可以)。eg:var a=Symbol;  a+’’;//报错

    10:==允许在相等比较中进行强制类型转化,而===不允许。

    11.null==undefined;//true.   除此之外Null.undefined他们自身相等。  null==false;//false.   undefined==false;//false

    12.var a={b:42};var b={b:43};   a<b;//false.  a>b;//false. a==b;//false   a<=b;//true. a>=b;//true.    比较时a/b转化’[object object]’

     

     

    第五章。语法

    1.var a,b;    a=do{b=4+38};    a;//42

    2.var a=42;  ++a;//43. ++43//报错referenceError.  ++a++;//报错referenceError

    3.运算符执行顺序:(1)&& > || > ?: > , (2)左关联:&&/||   右关联:?:/=

    4.函数参数:如果参数被省略或者值为undefined,则取该参数的默认值

    5.try..finally:执行try后执行finally(无论如何都会执行finally);finally中有return值会覆盖try中return值。

    6.switch…case中:case可以是表达式:switch(true){case a==10;console.log(10);break; …}

     

    第二部分。异步和性能

    第一章  异步:现在与将来

    第三章:promise

    1.try…catch:无法跨异步操作工作(及try里进行异步/回掉处理报错无法catch,只能硬生生报错) 

    2.promise.all([…])仅在所有成员的promise都完成才返回完成,其中任意一个被拒绝即被拒绝,并丢弃来自其他所有promise的全部结果

    注:(1)Promise.all([…])数组为空立即完成;Promise.race([…])数组为空,永不决议,不为空:一旦有任何一个promise完成则为完成,一旦任意一个为拒绝则为拒绝

          (2)Promise.all([p1,p2]).then(function(msgs){. //msgs是一个数组   })。 Promise.race([p1,p2]).then(function(msg){. //msg只返回最先执行完的回执   })

    3.归纳:

    (1)var p=new Promise(function(resolve,reject){ })

    (2)Promise.resolve(…)和Promise.reject(…)

    (3)then().catch().    p.catch(reject)与p.then(null,reject);一样

    (4)Promise.all([…])和Promise.race([…])

     

     

    Q1:Function.apply.bind(fn,null);224

    Q2:

     

    第四章。生成器

     

    第五章。程序性能

     第六章。性能测试与调优

    1.可用Benchamark.js测试(可在js,node.js环境运行)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    字体识别
    TMSHttpConfig工具使用
    firedac分页查询
    filefunc.pas
    dbfunc.pas
    TRawByteStringStream
    大小端交换
    variant的序列和还原
    ansistring和unicode的序列和还原
    malinajs来自Svelte 启发的前端编译器
  • 原文地址:https://www.cnblogs.com/miaSlady/p/9640158.html
Copyright © 2020-2023  润新知