第一章
- js诞生1995年,主要目的是在客户端处理验证。
- 一个完整的js实现有三部分:
- 核心(ECMAScript) 提供核心语言功能
- 文档对象模型(DOM)提供访问和操作网页内容的方法和接口
- 浏览器对象模型(BOM)提供和浏览器交互的方法和接口
- DOM级别
- DOM1:映射文档结构
- DOM2:引入DOM视图,DOM事件,DOM样式,DOM遍历和范围
- DOM3:引入了以统一方式加载和保存文档的方法,新增了验证文档的方法,对DOM核心进行扩展,开始支持XML1.0规范。
第二章
<script>元素
属性:- async 表示应该立即下载脚本,但不应该妨碍页面中其他操作,只适用于外部脚本文件
- charset 指定字符集
- defer 可以延迟到文档完全被解析后再执行, 只适用于外部脚本文件
- language 已废弃
- src 外部文件
- type 默认text/javascript
页面中嵌入script
在使用<script>嵌入JavaScript 代码时,记住不要在代码中的任何地方出现””字符串。
例如,浏览器在加载下面所示的代码时就会产生一个错误:
<script type="text/javascript">
function sayScript(){
alert("</script>");
}
</script>无论如何包含代码,只要不存在defer 和async 属性,浏览器都会按照
<script>元素在页面中
出现的先后顺序对它们依次进行解析。换句话说,在第一个<script>元素包含的代码解析完成后,第二个<script>包含的代码才会被解析,然后才是第三个、第四个在文档的
<head>元素中包含所有JavaScript 文件,意味着必须等到全部JavaScript 代码都被下载、解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始呈现内容)。对于那些需要很多JavaScript 代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白。为了避免这个问题,现代Web 应用程序一般都把全部JavaScript 引用放在<body>元素中页面内容的后面<noscript>元素 当浏览器不支持JS时,显示出元素中的内容
第三章
区分大小写
标识符第一个字符是字符、下划线或者$。
严格模式(strict mode) 开启方式:”use strict”;
用var定义的是局部变量。省略var是全局变量
数据类型
- 5种简单类型:Undefined,Null,Boolean,Number和String
- 一种复杂类型:Object
typeof是操作符不是函数。返回值有undefined,boolean,string,number,object,function。对未初始化和未声明的变量执行typeof 操作符都返回undefined 值。使用typeof 操作符检测null 值时会返回”object”
alert(null == undefined); //true
要将一个值转换为其对应的Boolean 值,可以调用转型函数Boolean()
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)首先,任何涉及NaN 的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN 与任何值都不相等,包括NaN 本身。例如,下面的代码会返回false:alert(NaN == NaN); //false。
isNaN()适用于对象。在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。数值转换
- Number()可以用于任何数据类型
Number()函数的转换规则如下。
- 如果是Boolean 值,true 和false 将分别被转换为1 和0。
- 如果是数字值,只是简单的传入和返回。
- 如果是null 值,返回0。
- 如果是undefined,返回NaN。
- 如果是字符串,遵循下列规则:
- 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即”1”
会变成1,”123”会变成123,而”011”会变成11(注意:前导的零被忽略了); - 如果字符串中包含有效的浮点格式,如”1.1”,则将其转换为对应的浮点数值(同样,也会忽
略前导零); - 如果字符串中包含有效的十六进制格式,例如”0xf”,则将其转换为相同大小的十进制整
数值; - 如果字符串是空的(不包含任何字符),则将其转换为0;
- 如果字符串中包含除上述格式之外的字符,则将其转换为NaN。
- 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换
的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
- 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即”1”
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(十六进制数)
可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)。
var num1 = parseInt("10", 2); //2 (按二进制解析)
var num2 = parseInt("10", 8); //8 (按八进制解析)
var num3 = parseInt("10", 10); //10 (按十进制解析)
var num4 = parseInt("10", 16); //16 (按十六进制解析)parseFloat()也是从第一个字符(位置0)开始解析每个字符。
而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。举例来说,”22.34.5”将会被转换为22.34。
它始终都会忽略前导的零
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
- Number()可以用于任何数据类型
转义字符占一个字符
var text = "This is the letter sigma: \u03a3.";
这个例子中的变量text 有28 个字符,其中6 个字符长的转义序列表示1 个字符。字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变
某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,
例如:
var lang = "Java";
lang = lang + "Script";
以上示例中的变量lang 开始时包含字符串”Java”。而第二行代码把lang 的值重新定义为”Java”
与”Script”的组合,即”JavaScript”。实现这个操作的过程如下:首先创建一个能容纳10 个字符的
新字符串,然后在这个字符串中填充”Java”和”Script”,最后一步是销毁原来的字符串”Java”和字
符串”Script”,因为这两个字符串已经没用了。要把一个值转换为一个字符串有两种方式。
- 第一种是使用几乎每个值都有的toString()方法
- 在不知道要转换的值是不是null 或undefined 的情况下,还可以使用转型函数String(),这个
函数能够将任何类型的值转换为字符串。String()函数遵循下列转换规则:
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;
- 如果值是null,则返回”null”;
- 如果值是undefined,则返回”undefined”。
Object 的每个实例都具有下列属性和方法。
- constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)
就是Object()。 - hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例
的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例
如:o.hasOwnProperty(“name”))。 - isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句
来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。 - toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值
相同。
- constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)
在应用于不同的值时,递增和递减操作符遵循下列规则。
- 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1 的操作。字
符串变量变成数值变量。 - 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN(第4 章将详细讨论)。
字符串变量变成数值变量。 - 在应用于布尔值false 时,先将其转换为0 再执行加减1 的操作。布尔值变量变成数值变量。
- 在应用于布尔值true 时,先将其转换为1 再执行加减1 的操作。布尔值变量变成数值变量。
- 在应用于浮点数值时,执行加减1 的操作。
- 在应用于对象时,先调用对象的valueOf()方法(第5 章将详细讨论)以取得一个可供操作的
值。然后对该值应用前述规则。如果结果是NaN,则在调用toString()方法后再应用前述规
则。对象变量变成数值变量。
var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1++; // 值变成数值3
s2++; // 值变成NaN
b++; // 值变成数值1
f--; // 值变成0.10000000000000009(由于浮点舍入错误所致)
o--; // 值变成数值-2
- 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1 的操作。字
var num1 = 5;
var num2 = 10;
var message = "The sum of 5 and 10 is " + num1 + num2;
alert(message); // "The sum of 5 and 10 is 510"
如果想先对数值执行算术计算,然后再将结果与字符串拼接起来,应该像下面这样使用
圆括号:
var num1 = 5;
var num2 = 10;
var message = "The sum of 5 and 10 is " + (num1 + num2);
alert(message); //"The sum of 5 and 10 is 15"- 相等和不相等——先转换再比较
- 全等和不全等——仅比较而不转换。
var result1 = ("55" == 55); //true,因为转换后相等
var result2 = ("55" === 55); //false,因为不同的数据类型不相等
条件操作符
var max = (num1 > num2) ? num1 : num2;- ECMAScript 中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式
传递的。
可以向ECMAScript 函数传递任意数量的参数,并且可以通过arguments 对象来访问这些参数。
由于不存在函数签名的特性,ECMAScript 函数不能重载。
本文介绍了JavaScript的基本概念和发展历程,包括JS的三个组成部分:ECMAScript、DOM和BOM,DOM的不同级别及其功能,以及如何在HTML中嵌入JavaScript代码。此外还讲解了JS的数据类型、变量作用域、严格模式等内容。
767

被折叠的 条评论
为什么被折叠?



