JS红宝书读书笔记(一)

第1章 前言

本人已有JS基础,主要是从B站上学习的相关视频,这篇文章主要记录一些视频不涉及的细节和印象模糊的内容。

第2章 在HTML中使用JavaScript

2.1 <script>元素

主要属性:

1.async(可):立即下载脚本,不妨碍页面。async

2.defer(可):完全解析后下载脚本。defer=“defer”

3.src(可):执行外部文件。src="(url)"

4.type(可):默认为text/javascript。一般使用该值,另一个为application/x-javascript。

嵌入式JavaScript只需指定type属性。代码块中使用</script>要加‘\’,如:alert("</script>")。否则会提前结束。

外部式JavaScript scr属性是必需的。且在XHTML中</script>可以省略,但HTML中不可省略。使用了scr属性后script标签内代码会被忽略。scr还可导入外部域的文件。

(MIME类型:文件扩展名类型)

若不存在async、defer属性,会按先后顺序执行。

2.1.1 标签的位置

script标签应该放在body标签的最后面,为了最后执行。

2.1.2 延迟脚本

使用了defer属性。

该属性只能在外部JavaScript使用。

最好只包含一个延迟脚本。

2.1.3 异步脚本

使用了async属性。

该属性只能在外部JavaScript使用。

不要包含修改DOM。

会在页面的load事件前执行。

2.2 嵌入式代码与外部代码

推荐外部。

优点:可维护性、可缓存、适应未来(其中XHTML与HTML语法相同)。

2.3 文档模式

标准模式:<!DOCTYPE html>开启,推荐。

混杂模式:没有文档声明时自动开启,不推荐。

准标准模式:与标准模式类似。

2.4 <noscript>元素

以下情况启用,正常情况不启用(类似报错):

1.浏览器不支持脚本。

2.脚本被禁用。

第3章 基本概念

3.1 语法

3.1.1 区分大小写

变量区分大小写,typeof是关键字,不能作为变量,但可以作为函数名。

3.1.2 标识符

驼峰命名,规则同其他语言。

3.1.4 严格模式

在严格模式下,不确定的行为会被处理,不安全的操作会抛出。

整个脚本严格:在顶部增加语句:“use strict”;

在函数顶部加则该函数严格。

3.2 关键字和保留字

1.ECMA-262第6版(es6)规定的所有关键字 :

break do in typeof

case else instanceof var

catch export new void

class extends return while

const finally super with

continue for switch yield

debugger function this

default if throw

delete import try

2.ECMA-262第6版为将来保留的所有词汇 :

(1)始终保留:enum

(2)严格模式下保留:

implements package public

interface protected static

let private

(3)模块代码中保留:await

严格模式下还有eval和arguments。

3.3 变量

松散型:可以保存任何类型数据。

未初始化的变量保存为undefined。

在函数里面var声明的变量为局部变量,但不使用var声明时为全局变量。(不推荐,且在严格模式下会报错)

function text() {
	message = "hi";
}

3.4 数据类型

Undefined、Null、Bollean、Number、String、Symbol(ES6)

3.4.1 typeof操作符

返回:

(1)“undefined”——未定义

(2)“boolean”——布尔值

(3)“string”——字符串

(4)“number”——数值

(5)“object”——对象或null

(6)“function”——函数

typeof message;     //"string"
typeof 95;          //"number"
3.4.2 Undefined类型

未初始化与未声明的变量typeof操作符都返回undefined。

所以最好变量全部初始化,即可通过typeof操作符区别变量是否被声明。

3.4.3 Null类型

null值表示一个空对象指针,所以typeof操作符会返回"object"。

如果变量用来保存对象,初始化最好为null,可通过typeof运算符区别变量是否已保存对象。

undefined派生自null,所以:

null == undefined;     //true
3.4.4 Boolean类型

True和False是标识符,不是布尔值。

可以对任何数据类型使用转型函数Boolean()

数据类型 为true 为false
String 非空字符串 空字符串""
Number 非0(包括无穷) 0和NaN
Object 任何对象 null
Undefined / undefined
3.4.5 Number类型
var Num1 = 070;       //八进制
var Num2 = 079;        //溢出,无效八进制,转化为79
var Num3 = 0x1f;       //十六进制

进行算术运算都转为十进制。

+0和-0被认为是相等。

保存浮点数值的内存空间说整数值的两倍,因此浮动数值会被尽可能的转为整数值。

var Num4 = 10.0;       //整数——10

小数点后面带6个0以上会被用e表示。(科学计数法)

浮点数值最高精度为17位小数,进行算术运算是会有舍入误差,所以不要测试某个特定的浮点数值。

if (a + b == 0.3) {     //不要这么做
	alert("You got 3.0");
}

最大值:Number.MIN_VALUE

最小值:Number.MAX_VALUE

超出则会自动转换成Infinity或-Infinty,他们不能参与运算。

isFinite()函数,有穷true,无穷false。

Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY也可以表示正负无穷。

任何数值除以非数值会返回NaN。

0 / 0 == NaN;
1 / 0 == Infinity;
-1 / 0 == -Infinity;

NaN与任何值都不相等。

isNaN()函数:NaN为true。(先转为数值再判断,对象则先调用valueOf()方法,再调用toString()方法)

数值转换:Number()、parseInt()(常用)、parseFloat()

paseInt可以传第二个参数,表示进制。

paseFloat若能解析成整数会解析成整数。

3.4.6 String 类型

length方法返回长度,但有双字节字符不会精确返回。

字符串不可改变。

toString()方法:数值、布尔值、对象和字符串值都有,但null和undefined没有。

数值的toString方法可以传递一个参数,表示使用几进制表示的字符串。

String()方法可以转换任意数据类型,包括null、undefined(转换为"null"、“undefined”)。

3.4.7 Object类型

不给构造函数传递参数可以省略括号。

var o = new Object();
var o = new Object;        //不推荐

每个Object实例都有以下方法:

(1)constructor:创建当前对象的函数(构造函数)。

(2)hasOwnProperty(propertyName):检查属性(propertyName(属性名,用字符串表示))在当前对象实例是否存在。

(3)isPrototypeOf(Object):检查传入对象是否为原型。

(4)propertyIsEnumerable(propertyName):检查属性是否能for-in枚举。

(5)toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

(6)toString():返回对象的字符串表示。

(7)valueOf():返回对象的字符串、数值或布尔值表示。

宿主对象( JS所运行的环境提供的对象 ,比如DOM、BOM中的对象)可能不会继承Object。

3.5 操作符

操作符包括算术操作符、位操作符、关系操作符、相等操作符。

适用于字符串、数字值、布尔值、对象。

应用于对象时,会调用对象的valueOf()和(或)toString()方法。

3.5.1 一元操作符

递增(++)、递减(–)。

运用于非数值时,会先调用parseFloat()方法。运用于对象时,会先调用valueOf(),如果是NaN,再调用toString()。

加(+)、减(-)也会以上转型。

3.5.2 位操作符

es所有数值都以IEEE-754 64位格式存储。

操作符先将64位的值转换成32位的整数,再执行操作,最后将结果转换64位。

负数的二进制码是正数的补码(反码+1为补码)。

但是es会尽量隐藏:

-18.toString(2) == "-1010";

es也存在无符号整数(第32位不再表示符号)。

~、&、|、^、<<、>>、>>>。

3.5.3 布尔操作符

1.两个 ! 就是模拟Bollean()。

2.&&:如果第一个操作数为false,不会执行第二个操作数。

//含null,返回null;
//含NaN,返回NaN;
//含undefined,返回undefined。

3.||:如果第一个操作数为true,不会执行第二个操作数。

//都为null,返回null;
//都为NaN,返回NaN;
//都为undefined,返回undefined。
3.5.4 乘性操作符
Infinity * 0 == NaN;
Infinity * (非0) == -Infinity(/Infinity);
(非0) / 0 == -Infinity(/Infinity);
(非0) / Infinity == -Infinity(/Infinity);
(非0) % Infinity == (非0);
Infinity * Infinity == Infinity;
Infinity / Infinity == NaN;
Infinity % Infinity == NaN;
Infinity % (非0) == NaN;
0 / 0 == NaN;
0 % 0 == NaN;
(非0) % 0 == NaN;
不是数值会调用Number()方法。
3.5.5 加性操作符
Infinity + -Infinity == NaN;
+0 + -0 == +0;

Infinity - Infinity == NaN;
+0 - +0 == +0;
+0 - -0 == -0;
-0 - -0 == +0;

+:如果一个数是字符串,可以调用toString()或String()转换后拼接字符串。

-:如果一个数不属于数值,转型至数值(与之前方法相同)运算。

3.5.6 关系操作符

若都为字符串,比较字符编码值。

若其他情况,转换为数值比较。

3.5.7 相等操作符

相等(==)和不相等(!=)——先转换再比较;

全等(=)和不全等(!)——仅比较;

与数值比较时先转换为数值。

null和undefined是相等的,但不是全等的。

有一个是NaN,相等为false,不相等为true。

两个都是对象,会比较是不是同一个对象,同一个true,不同false。

推荐使用全等和不全等。

3.5.8 条件操作符

也就是三元操作符。

3.5.9 赋值操作符

就是=。

在=前面加其他操作符即可构成复合赋值操作,可简化赋值操作,无性能提升。

*=、/=、%=、+=、-=、<<=、>>=。

3.4.10 逗号操作符

一般用于声明变量,用于赋值返回最后一项。

3.6 语句

3.6.1 if语句

推荐使用代码块。

3.6.2 do-while语句
3.6.3 while语句
3.6.4 for语句

es中不存在块级作用域,循环内部定义的变量也可以在外部访问到。

3.6.5 for-in语句
for (var propName in window) {
	document.write(propName);
}

es中对象的属性是没有顺序的,通过for-in循环输出的属性名的顺序是不可预测的,都会返回一次,但会根据浏览器不同而不同。

如果迭代的对象的变量为null、undefined,会不执行循环体。

3.6.6 label语句

可以由break、continue来引用。一般与循环语句搭配使用。

start:for (var i=0; i < count; i++) {
	alert(i);
}
3.6.7 break和contiinue语句

break:跳出循环。

continue:执行下一次循环。

都可以与label语句联合使用,返回代码中特定的位置,一般在循环嵌套是使用。

outermost:
for (var i=0; i < 10; i++) {
	for (var j=0; j < 10; j++){
		...
		break outermost;
	}
}

如果使用label语句,一定要使用描述性的标签,同时不要嵌套过多的循环。

3.6.8 with语句

作用是将代码的作用域设置到一个特定的对象中。

会导致性能下降,不建议使用。

严格模式下不允许使用。

3.6.9 swich语句

与C语言基本相同,但是可以使用如何数据类型,case的值可以是变量&

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值