javascript高级程序设计-笔记一

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中对应的值。

没有更多推荐了,返回首页