《你不知道的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环境运行)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/miaSlady/p/9640158.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CP命令引发的思考

转自&#xff1a;OSC开源社区今天同事用 cp 命令&#xff0c;把他给惊到了&#xff01;背景是这样的&#xff1a;他用 cp 拷贝了一个 100 G的文件&#xff0c;竟然一秒不到就拷贝完成了&#xff01;用 ls 看一把文件&#xff0c;显示文件确实是 100 G。sh-4.4# ls -lh -rw-r-…

安装windows XP或者2003时提示找不到硬盘驱动器的解决办法(总结)转载

&#xff08;本文属于转载&#xff09; 由于SATA接口在近年才推出&#xff0c;Windows XP问世的时候&#xff0c;还没有它&#xff0c;所以安装Windows XP时&#xff0c;需要调用SATA驱动程序&#xff0c;而你又没有提供相应的驱动&#xff0c;就会出现无法识别硬盘的错误。 不…

C宏定义注意事项

1、带参数的宏与函数的优缺点 2、宏定义一个函数时&#xff0c;需要注意每个参数都需要用括号括起来。 如&#xff1a;#define Min(a,b) ((a)<(b)?(a):(b)) 3、宏定义一年中的秒数 #define SECONDE_OF_YEAR 606024365UL &#xff08;√&#xff09; #define SECONDE_OF_YE…

不要再来北上广深了

大家好&#xff0c;我是写代码的篮球球痴最近我们的一个离职群里面讨论一个问题&#xff0c;就是在北上广深工作的性价比问题&#xff0c;我有几个同事这样描述。一线城市确实会遇到一些机会&#xff0c;也有可能会遇到一些改变命运的机会。不过对于生活来说&#xff0c;一线城…

mogndb 慢查询

0 摘要 在MySQL中&#xff0c;慢查询日志是经常作为我们优化查询的依据&#xff0c;那在MongoDB中是否有类似的功能呢&#xff1f;答案是肯定的&#xff0c;那就是开启Profiling功能。该工具在运行的实例上收集有关MongoDB的写操作&#xff0c;游标&#xff0c;数据库命令等&a…

Linux命令中正则表达式的运用

一、正则表达式简介 事实上&#xff0c;正则表达式不仅适用于linux&#xff0c;多种编程语言中也可以使用到它&#xff0c;因为它实际上是人们对于某种规律的表达方式。 如果要把他的所有应用都讲上的话那这篇文章会变的太长以至于无法阅读&#xff0c;我只介绍他在linux下和几…

程序的内存分配模式(堆栈以及静态存储区,文字常量区,代码区)

程序的内存分配模式 一个由 C/C编译的程序占用的内存分为以下几个部分&#xff1a; 1、栈区&#xff08; stack &#xff09;—由编译器自动分配释放&#xff0c;存放函数的参数值&#xff0c;局部变量的值 等。其操作方式类似于数据结构中的栈。 2、堆区&#xff08; heap&a…

稚晖君教你制作全球最迷你的自平衡机器人

摘要&#xff1a;Nano是一个小巧可爱的机器人&#xff0c;身高大约10公分&#xff0c;特点是平衡感好&#xff0c;长得很白以及善于卖萌。作为全球最迷你的自平衡机器人&#xff0c;Nano身材虽小&#xff0c;但配置有丰富的传感器—陀螺仪&#xff0c;超声波&#xff0c;Motion…

9.13作业

2、python test.py执行的三个阶段是什么&#xff1f;在哪个阶段识别文件内的python语法&#xff1f; 先运行python解释器&#xff0c;将python文件从硬盘读取到内存&#xff0c;解释执行内存读取的代码&#xff0c;开始识别python语法。 在第3个阶段识别文件内的python语法 3、…

tomcat 6.0环境, 网页超链接,文件下载另存为时,不能识别msi文件类型,另存为只能选htm和所有文件。...

问题: tomcat 6.0环境&#xff0c; 网页超链接&#xff0c;文件下载另存为时&#xff0c;不能识别msi文件类型&#xff0c;另存为只能选htm和所有文件。 解决办法:在 ...\Tomcat 6.0\conf 文件夹下的 web.xml 文件中添加以下类型声明:<mime-mapping><extension>msi…

ARM不同位数系统int字节数区别

32位和64位系统区别及int字节数 一&#xff09;64位系统和32位有什么区别&#xff1f; 1、64bit CPU拥有更大的寻址能力&#xff0c;最大支持到16GB内存&#xff0c;而32bit只支持4G内存 2、64位CPU一次可提取64位数据&#xff0c;比32位提高了一倍&#xff0c;理论上性能会…

我的广州大伯

2021年11月24日我正在办公室和同事调试项目&#xff0c;突然接到我婶的微信语音电话&#xff0c;我婶说广州的大伯过世了&#xff0c;他们现在正在去大伯家的路上。我大伯是爷爷奶奶最大的儿子&#xff0c;爷爷奶奶在世时&#xff0c;家里的很多事情&#xff0c;都会和大伯商量…

VUE 入坑系列 一 双向绑定

html代码<div id"app"><p>{{message}}</p><span>message1</span> <input v-model"message"><span>message2</span> <input v-model"message"></div> View Codejavascript代码var …

semihost/ITM机制浅析以及使用JLINK通过ITM调试stm32单片机

使用ITM机制实现调试stm32单片机&#xff0c;实现printf与scanf。 ITM简介 ITM机制是一种调试机制&#xff0c;是新一代调试方式&#xff0c;在这之前&#xff0c;有一种比较出名的调试方式&#xff0c;称为半主机&#xff08;semihosting&#xff09;方式。 在pc上编写过C语…

spring+ibatis配置

spring-dao.xml配置 <bean id"sqlMapClient" class"org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name"configLocation" value"classpath:/sql-map-config.xml"/> <property…

5毛钱搞一个2.4GHz射频信号探测器

射频电子领域神秘而又朦胧&#xff0c;今天我们通过一个小小的射频检波电路来体验一下射频世界的魅力。实验目的制作一个 2.4 GHz 射频信号探测器&#xff0c;电路简单总成本不到 5 毛钱。该电路在靠近 2.4 GHz 无线信号时 LED 灯会闪烁。这是我用制作好的 2.4 GHz 射频信号靠近…

华为宣布:免费培养8000名嵌入式开发者!学习免费!实践免费!辅导免费!

真正的5G时代&#xff0c;万物互联各行各业都离不开智能物联网技术物联网 (IoT) 设备会生成海量数据通过分析这些数据可以提供业务洞察力优化业务决策&#xff0c;实现流程自动化也由于物联网的迅速兴起&#xff0c;专业性人才稀缺各阶层课程层出不穷&#xff0c;开发者眼花缭乱…

关于××× 相关收集资料

1、服务&#xff1a; 那要建立一个必需要什么条件呢&#xff1f; 第一&#xff1a;服务器要有一个固定的外网IP地址。 第二&#xff1a;服务器至少要有两张网卡&#xff0c;来接口和内部网的通信。 当有了这样的条件&#xff0c;我们就可以来建立一台服务器了。转载于:https://…

现在不要着急买房

我写这篇文章&#xff0c;是因为确实最近有人向我咨询买房的事&#xff0c;今天抽空想聊下这方面的事&#xff0c;如果观点不正确&#xff0c;欢迎评论说出你的想法。是前天&#xff0c;我一个同学咨询我买房的事情。我也直接说了&#xff0c;最近两年&#xff0c;把钱放在口袋…

解决vlc-android播放http视频退出问题

之前用vlc-android播放http视频,程序就自动退出了,尝试用ndk-gdb调试,但是一调试,就报 /home/administrator/code/vlc-android/extras/package/android/vlc-android/obj/local/armeabi/gdb.setup:4: Error in sourced command file:Remote communication error: Connection res…