JavaScript高级程序设计笔记01 | 第一章到第四章 | 关键字与保留字 | 数据类型 | 操作符 | 作用域

观前提示:大部分都是书上的内容,个人理解的部分的较少,看我的笔记还不如去看书

第二章

async:可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或 等待加载其他脚本。只对外部脚本文件有效。即异步脚本

defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有 效。IE7及更早版本对嵌入脚本也支持这个属性。即立即下载,但延迟执行

src:可选。表示包含要执行代码的外部文件。

type:可选。可以看成是 language 的替代属性;表示编写代码使用的脚本语言的内容类型(也称为 MIME类型)

注:

1、不能在任何地方出现"",实在需要,使用转义字符“\”

2、XHTML中可省略,要把 defer 属性设置为 defer=“defer”,async也一样

3、尽量使用外部文件

4、如果页面不支持js

<body>     
	<noscript>       
		<p>本页面需要浏览器支持(启用)JavaScript。     
	</noscript>   
</body> 

第三章

标识符

1、第一个字母必须是字母、下划线、美元符号

2、其他字符可以为字母、下划线、美元符号或数字

3、ECMAScript 标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词的 首字母大写

4、不能把关键字、保留字、true、false 和null 用作标识符

严格模式

function doSomething(){     
	"use strict";      
    //函数体 
} 

关键字与保留字

关键字(带*号上标的是第 5版新增的关键字):

break do instanceof typeof case else new var catch finally return void continue for switch while debugger* function this with default if throw delete in try

保留字:

abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public

第5版把在非严格模式下运行时的保留字缩减为下列这些:

class enum extends super const export import

在严格模式下,第5版还对以下保留字施加了限制:

implements package public interface private static let protected yield

除此之外eval 和 arguments 也施加了限制

变量

若省略var,则定义为全局变量

数据类型

1、undefined类型

未经过初始化的变量,会保存一个特殊的值——undefined

但在 typeof 检查变量的数据类型里,未经初始化与未被声明的变量会显示undefined

2、null类型

typeof 操作符检测 null 值时会返回object

位于 null 和 undefined 之间的相等操作符(==)总是返回 true,但它们的用途完全不同

3、boolean类型

此true 不一定等于 1, false 也不一定等于 0

Boolean()函数,将数值转换为bool值

4、number类型

八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)。如果字面值中的 数值超出了范围,那么前导零将被忽略,后面的数值将被当作十进制数值解析

十六进制字面值的前两位必须是 0x,后跟任何十六进制数字(0~9 及 A~F)。其中,字母 A~F 可以大写,也可以小写

对于那些极大或极小的数值,可以用 e表示法(即科学计数法)表示的浮点数值表示。

小数计算因为会出现舍入误差,所以不要测试某个特定的浮点数值

因内存原因,存在最大值 Number.MAX_VALUE 以及最小值Number.MAX_VALUE ,如果超出了范围,这个数值将被自动转换成特殊的 Infinity (正无穷)值以及-Infinity(负无穷)

isFinite()函数,数值在最大最小值之间会返回true

NaN,这个数值用于表示一个本来要返回数值的操作数 未返回数值的情况

首先,任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN

其次,NaN 与任何值都不相等,包括 NaN 本身

isNaN()函数,判断是否能转换为数值,若不能,则为true

Number()函数 转换规则 (与一元加操作符操作相同)

 如果是 Boolean 值,true 和 false 将分别被转换为 1和 0。

 如果是数字值,只是简单的传入和返回。  如果是 null 值,返回 0。

 如果是 undefined,返回 NaN。

 如果是字符串,遵循下列规则:

i、 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1" 会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了);

ii、 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽 略前导零);

iii、 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整 数值;

iv、 如果字符串是空的(不包含任何字符),则将其转换为 0;

v、 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。

 如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换 的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。

parseInt()函数

var num1 = parseInt(“1234blue”); // 1234

var num2 = parseInt(""); // NaN

var num3 = parseInt(“0xA”); // 10(十六进制数)

var num4 = parseInt(22.5); // 22

var num5 = parseInt(“070”); // 56(八进制数)

var num6 = parseInt(“70”); // 70(十进制数)

var num7 = parseInt(“0xf”); // 15(十六进制数)

但在ECMAScript 5中,parseInt()已经不具有解析八进制值的能力 ,即num5为70,为消除歧义

var num1 = parseInt(“AF”, 16); //175

var num2 = parseInt(“AF”); //NaN

parseFloat()函数

只解析十进制

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

5、String类型

用双引号或单引号框起来的都是字符串

\n 换行 \t 制表 \b 空格 \r 回车 \f 进纸

toString() 转换为字符串,当转换对象为数值的时候,括号里的数字为进制数

6、Object类型

var o = new Object();

Object 的每个实例都具有下列属性和方法:

i、constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor) 就是 Object()。

ii、 hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例 的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例 如:o.hasOwnProperty(“name”))。

iii、isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型(第 5 章将讨论原 型) 。

iv、 propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句 (本章后面将会讨论)来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符 串形式指定。

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

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

vii、 valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值 相同。

一元操作符

++x,与加减乘除优先级相同

x++,落后于加减乘除,则先计算完,再自加一

布尔操作符

非(!)

true:空字符串、数值 0、null、NaN、 undefined

false:对象、非空字符串、任意非 0数值(包括 Infinity)

与(&&)

在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;

i、 如果第一个操作数是对象,则返回第二个操作数;

ii、如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该 对象;

iii、如果两个操作数都是对象,则返回第二个操作数;

iv、如果有一个操作数是 null,则返回 null;

v、 如果有一个操作数是 NaN,则返回 NaN;

vi、如果有一个操作数是 undefined,则返回 undefined。

逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。

或(||)

与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;

i、如果第一个操作数是对象,则返回第一个操作数;

ii、 如果第一个操作数的求值结果为 false,则返回第二个操作数;

iii、 如果两个操作数都是对象,则返回第一个操作数;

iv、如果两个操作数都是 null,则返回 null;

v、 如果两个操作数都是 NaN,则返回 NaN;

vi、如果两个操作数都是 undefined,则返回 undefined。

与逻辑与操作符相似,逻辑或操作符也是短路操作符。

函数

1、arguments[0]、arguments[1]等为传入的参数,若没有赋值,则默认为undefined

2、不支持重载,若两个名字相同的函数,则该名字只属于后定义的函数

第四章

关于作用域

1、

var person = new Object();

person.name = “Nicholas”;

alert(person.name); //“Nicholas”

创建了一个对象并将其保存在了变量person中,并为该对象添加了一个名为 name 的属性

2、

var obj1 = new Object();

var obj2 = obj1;

obj1.name = “Nicholas”;

alert(obj2.name); //“Nicholas”
当为 obj1 添加 name 属性后,可以通过 obj2 来访问这个属性, 因为这两个变量引用的都是同一个对象。个人理解:obj1与obj2都类似于指针,指向同一个Object内存。

3、

function setName(obj) {

​ obj.name = “Nicholas”;

}

var person = new Object();

setName(person);

alert(person.name); //“Nicholas”

个人理解:类似于2,传入的obj类似于新的指针,指向函数外person的内存,所以函数内部更改的是内存中的数据,所以在函数外部进行访问的时候,更改是存在的

4、

想知道它是什么类型的对象,语法如下:

result = variable instanceof constructor

5、

try-catch 语句的 catch 块

with 语句

这两个语句都会在作用域链的前端添加一个变量对象。对 with 语句来说,会将指定的对象添加到 作用域链中。对 catch 语句来说,会创建一个新的变量对象,其中包含的是被抛出的错误对象的声明。

6、

i、if 语句中的变量声明会将变量添加到当前的执行环境

ii、由 for 语句创建的变量 i 即使在 for 循环执行结束后,也依旧会存在 于循环外部的执行环境中

iii、初始化变量时没有使用 var 声明,该变量会自 动被添加到全局环境

回收机制

当代码中存在循环引用现象时,“引用计数”算法就会导致问题。

解除变量的引用不仅有助于消除循环引用现象,而且对垃圾收集也有好处。为了确保有效地回 收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值