通读JavaScript红皮书(第二三章)

总结红皮书JavaScript高级程序设计的精髓知识点,感谢红皮书原作者Nicholas C. Zakas

在这里插入图片描述
和博主一起走入JavaScript界的圣经,红皮书,JavaScript高级程序设计第三版。
我们尽量用最短的时间读完这本书,并且总结出整书的精华知识点。go!

2.1.defer和async属性

defer:

表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外部脚本文件有效。 相当于告诉浏览器立即下载,但延迟执行。

async:

表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。
异步脚本并不保证按照指定它们的先后顺序执行,一定会在页面的load事件前执行,但可能会在DOMContentLoaded事件触发之前或之后执行。

换言之,
只要不存在defer和async属性,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析。

2.2.<script>标签的位置

JavaScript代码放在<body>的最后,先呈现浏览器的内容,因为浏览器在遇到body标签时才开始呈现内容。

2.3.CDATA片段

指不应被XML解析器进行解析的文本数据。
在这里插入图片描述

2.4.外部js的优势

  • 可维护性
  • 可缓存(两个页面引入一个js只需下载一次)
  • 适应未来

2.5.<noscript>元素

  • 浏览器不支持脚本
  • 浏览器支持脚本但脚本被禁用
    满足以上任一条件,浏览器会显示的内容。

原书第二章小结在此

在这里插入图片描述
基本和博主总结的一致。下面我们进军第三章

3.1区分大小写

ECMAScript中一切区分大小写,也就是说Baby和baby是代表两个宝贝。

3.2标识符第一个字符不能是数字

第一个字符:必须是一个字母,下划线或一个$
其他字符:上面的,数字

3.3驼峰命名规则

myHouse
yourBaby
iLoveYou
第一个字母小写,遇到一个单词大写

3.4注释

单行 :

 //xxx

多行:

 /*
 *
 *
 */

3.5严格模式

"use strict";

可在:

  1. 整个脚本代码中启用严格模式
  2. 也可以在某个函数体内启用严格模式

3.6没有分号和大括号也可运行,但是不建议!!!!

可能导致:

程序判断结束耗费不必要的性能
压缩代码多余空格时报错等

3.7关键字

这就是即使不是数字开头也不能命名标识符的大佬们
在这里插入图片描述
✳为ECMA5新增

3.8保留字

尽管没有用途,但是以后可能会有用途,也不让你随便用,懂?

在这里插入图片描述
第三版定义了如上的保留字,但是第五版增加了两个新的保留字letyield

3.9var-var-var

var应该是JavaScript里用的最多的一个字符了,他有资格被写三遍在这里。

var定义的是局部变量

如果在函数中定义一个var则,这个变量在函数推出后就会被销毁。
例如:

function(){
var abc="hi";//局部变量
}
test();
alert(message);//错误

可以省略var 则,abc则是全局变量,
但是不建议如此操作为生命的变量,在严格模式下会抛出ReferenceError

3.10JavaScript 的五种数据类型

这应该是大家背的最熟的了,反正我能被出来
Undefined,Null,Boolean,Number,String
还有更酷一点的,复杂的Object,本质上是由一组无序的名值对组成的。

3.11typeof操作符

ok只有六种数据类型,能表示出这么多种JavaScript的数据吗?
所以应运而生的typeof(我用typeof好好看看不就得了)

  • 如果是函数 -“function”,如果是除了Null的其他结构也是可以直接输出相应的

如果是其他也能测:

var abc=“some string”;
alert(typeof message);//"string"
alert(typeof 17);//"number"

如果typeof Null

what happen?

会返回object
因为特殊值null被认为是一个空的对象的引用

3.12细说几种数据类型

3.12.1 Undefined

只有一个值,undefined 。
在var 只声明未赋值时,这个变量的值就是undefined

var abc;
aleret(abc==undefined;//true

3.12.2Null

var car = null; 
alert(typeof car);     // "object" 

null类型也是只有一个值的数据类型,null
null表示一个空对象指针。
对于将来想要用于保存对象的变量,初始赋值设为null。

3.12.3Boolean类型

两个字面值,true false
这两个值与数字值不是一回事,因此true不一定等于1,二false也不一定等于0。

记得区分大小写,True 不是Boolean类型

其他数据类型与布尔类型的联动:
数据类型转换为true的值转换为false的值
booleantruefalse
String任何非空字符串“”(空字符串)
Number任何非零数字0和NaN
Object任何对象null
Undefinedn/a(not applicable缩写(不适用))undefined

3.12.4Number类型

整数

可以赋值为十进制,八进制,十六进制

但是,进行算术运算时,所有八进制,十六进制表示的数值最终都将被转换成十进制数值。

浮点数

所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。

浮点数值的高精度是 17位小数,但在进行算术计算时其精确度远远不如整数。

例如,0.1加 0.2 的结果不是 0.3,而是 0.30000000000000004。这个小小的舍入误差会导致无法测试特定的浮点数值。

所以不要不要不要这样测试:

if (a + b == 0.3){          // 不要做这样的测试!   
  alert("You got 0.3."); } 
NaN

即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数 未返回数值的情况(这样就不会抛出错误了)

NaN 本身有两个非同寻常的特点。首先,任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN,这 个特点在多步计算中有可能导致问题。其次,NaN 与任何值都不相等,包括 NaN 本身.

关于isNaN()
在这里插入图片描述

数值转换

有 3个函数可以把非数值转换为数值:Number()、parseInt()和 parseFloat()。

var num1 = parseInt("10", 2);     //2  (按二进制解析) 
var num2 = parseInt("10", 8);      //8  (按八进制解析) 
var num3 = parseInt("10", 10);     //10 (按十进制解析) 
var num4 = parseInt("10", 16);     //16 (按十六进制解析)
 var num1 = parseFloat("1234blue");        //1234 (整数) 
 var num2 = parseFloat("0xA");              //0 
 var num3 = parseFloat("22.5");             //22.5 
 var num4 = parseFloat("22.34.5");          //22.34 
 var num5 = parseFloat("0908.5");          //908.5 
 var num6 = parseFloat("3.125e7");          //31250000 

已经凌晨两点了,读不动了,明天醒了继续,争取尽快搞定这本红皮书。
晚安。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yoo前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值