2.1 script中定义的属性
- async:可选。
表示应该立即下载脚本,但是不应该妨碍页面中的其他操作。
只对外部脚本文件有效。 - charset:可选。 表示通过src属性指定的代码的字符集。
- defer: 可选。
表示脚本可以延迟到文档完全被解析和显示之后再执行。
只对外部脚本文件有效。 - src:可选。
表示包含要执行代码的外部文件。
2.2 使用script元素的两种方式
- 直接在页面中嵌入JavaScript代码和包含外部Javascript文件。
- 无论如何包含代码,只要不存在defer和async属性,
浏览器都会按照script元素在页面中出现的先后顺序对他们进行解析。 - defer注意点:
<script type="text/javascript" defer="defer" src="example1.js"> <script type="text/javascript" defer="defer" src="example2.js">
这两个延迟脚本不一定会按照顺序执行。
2.3 CDATA片段
<script type="text/javascript">
//<![CDATA[
function compare(a,b){
if(a < b){
alert("a is less than b");
}else if(a > b){
alert("a is greater than b");
}else{
alert("a is equal to b");
}
}
//]]>
</script>
- 目的:解决浏览器的兼容
2.4 文档模式
- 混杂模式:会让IE的行为与IE5相同,
- 标准模式:则让IE行为更接近标准行为。
- 这两种模式主要影响css内容的呈现,
但在某些情况下会影响JavaScript的执行。
2.5 noscript元素
- 其中的内容会在一下两种情况下显示:
- 浏览器不支持脚本
- 浏览器支持脚本,但是脚本被禁用。
3.1 严格模式
- ECMAScript 5引入了严格模式,是为js定义了一种不同的解析
与执行模型。在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,
而且对某些不安全操作也会抛出错误。
3.2 变量
- ECMAScript的变量是松散类型的,
所谓松散类型就是可以用来保存任何类型的数据。 - 局部变量
function test(){ var message = "hi"; //局部变量 }
alert("message"); //错误- 全局变量function test(){ message = "hi"; //全局变量 }
alert("message");
3.3 数据类型
- ECMAScript有5种简单数据类型
Undefined ,Null,Boolean,NUmber,String
还有一种复杂数据类型Object(一组无序的名值对组成). - ECMAScript不支持任何创建的自定义类型的机制,
所有值最终都将是上述6种数据类型之一。 - 使用tyoeof操作符可以检测 给定变量的数据类型:
返回的字符串有:undefined, string,boolean,number,object,function - Undefined类型只有一个值undefined。在使用
var 声明变量但是未对其初始化时,这个变量的值就是undefined. - undefined值与尚未定义的变量之间的区别:
var message; //这个变量声明后默认取得了Undefined值
// var age;
alert(message); //Undefined
alert(age); //产生错误
- 对于没有声明的变量,只能执行一项操作,即使用typeof操作符检测
其数据类型。而且对未初始化和未声明的变量执行typeof操作都会返回
undefined值。 - NUll类型:是第二个只有一个值的数据类型,这个特殊值为null.
null值表示一个空对象指针。使用typeof操作符检测null值会
返回object。uundefined值是派生自null值。所以对他们的相等性测试
null == undefined 返回true. - Boolean类型:只有true和false.可以使用Boolean()将一个值转换为
其对应的Boolean值。 - javascript表示的数值是有范围的,如果,某次计算的结果
,得到了一个超出JavaScript数值范围的值,那么这个数值被自动转化为
特殊的Infinity值。如果某次计算返回正或负的Infinity值,那么
该值将无法继续参与下次的计算。因为infinity不是能够参与计算的数值。
要想确定一个数值是否为有穷的,可以使用isFinite()函数。 - NaN类型:任何涉及NaN的操作,都会返回NaN,NaN与任何值都不相等,包括NaN本身。
通过isNaN()函数,确定这个参数是否“不是数值”。 - 将非数值转换为数值的函数:
Number():可以用于任何数据类型
parseInt(),parseFloat():用于把字符串转换成数值。
这两个都是从第一个字符开始解析每一个字符。而且也是
一直解析到字符串末尾。
在使用parseInt()函数时,ECMAScript3和5之间有分歧
所以在转换时,应该明确指定基数。
例:var num1 = parseInt(“10”,8);
字符串
- ECMAScript表示的字符串是不可变的。即:字符串
一旦创建,它们的值就不能改变。 - 将一个值转化为字符串的方法:
第一种:使用toString()(除了Null和Undefined)方法。可以传入基数。
第二种:使用String()函数。其转换规则为:
如果值有toString()方法,则调用该方法,
如果值为null,则返回"null"
如果值为undefined,则返回"undefined".
3.4理解函数参数
- ECAMScript函数的参数与大多数其他语言中函数
的参数也不同。 - ECMAScript函数不介意传递进来多少个参数,
也不在乎传进来参数是什么数据类型。
其内部是用一个数组来表示的,函数接收
到的始终都是数组,而不管这个数组中包含哪些参数。 - 在函数体内可以通过arguments对象来访问这个
参数数组,从而获取传递给函数的每一个参数。 - 函数例子:
function doAdd(num1, num2){
argumenys[1] = 10;
alert(arguments[0] + num2);
}
- 每次执行这个doAdd()函数都会重写第二个参数,
将第二个参数值修改为10,因为arguments()对象中
的值会自动反映到对应的命名参数。所以修改argument[1],
也就修改了num2,但是读取这两个值并不会访问相同的内存空间。
他们的内存空间是独立的,但是值会同步。
同时这种影响是单向的;修改命名参数不会改变arguments中对应的值。