JavaScript基础 ( 3 章 )

严格模式

ECMAScript 5 引入了严格模式, 要在整个脚本中启用严格模式, 可在顶部添加如下代码:

"use strict";

在函数内部执行这条语句, 则表示这个函数要在严格模式下运行:

function doSomething() {

  "use strict";

  // 函数体

}

支持严格模式的浏览器版本 IE10+, Firefox 4+, Safari 5.1+, Opera 12+, Chrome

最好在每条语句后边都加 ;号

变量在定义时, 最好直接给与初始化.

function test() {

  var message = "hi"  // 这是一个局部变量

}

function test() {

  message = "hi"  // 这是一个全局变量, 即省略 var 就可以定义全局变量, 不推荐这样做.

}

 

1.For … In 循环

For … In 声明用语遍历叔祖或者对象的属性 .

For...In
 1 <html> 
 2 <body> 
 3 
 4 <script type="text/javascript"> 
 5 var x 
 6 var mycars = new Array() 
 7 mycars[0] = "Saab" 
 8 mycars[1] = "Volvo" 
 9 mycars[2] = "BMW" 
10 
11 for (x in mycars)         // 此处, x 作为下标,mycars是数组名字 
12 { 
13 document.write(mycars[x] + "<br />") 
14 } 
15 </script> 
16 
17 </body> 
18 </html>

 

2. 拆分行

document.write( “Hello \

World !”) ;

3. 数据类型

简单类型

Undefined  // 这个值未定义

Null   -> 是一种对象 typeof( null )  “object”

Boolean

Number

String

复杂类型

Object

typeof(message) , typeof(95) 等等,因为JavaScript是松散类型。(var f = 10 ; f = “nihao”; )

typeof 操作符

"underfined" // 未定义

"boolean"  // 波尔类型

"String"  // 这是一个字符串

"number" // 这是一个数值

"object"  // 这是一个对象或 null

"function" // 这是一个函数

细说
undefined :  ( 只有一个值 )
  • 声明变量时,未初始化,则是 undefined类型 ( 所以声名变量时一定要初始化 )
  • undefined与未定义变量的区别 : 例如 var message ; alert(message) ; // undefined , alert( age ) //产生错误,因为 age未定义,对于未声明过的变量只能执行 typepf 检测其数据类型,并且未定义的变量也是 undefined类型 ( 与定义了但是未初始化一样 ) ,所以当定义变量时一定要初始化,以区别 是定义了变量未初始化还是压根就没有定义此变量。
Null : ( 只有一个值 )
  • typeof( null )   // 返回 Object , 可见 null 是对象Object 类型
  • 定义对象引用时,如果发现没有指定的话,则要指定 null

例如 var car = null;

alert(typeof car);  // "object"

 

Boolean 类型 : ( true , false )
  • var found = true ;    var found = false ;         // true , false 区分大小写 .
Number 类型
  • 十进制整数   var number = 55 ;
  • 八进制整数   var number = 070 ;
  • 十六进制整数 var hexNum = 0x1f ;
  • 浮点数 var floatNum = 1.1 ;   var floatNum = 10.0 ;    // 虽然是整数,但是解析成小数, 浮点数相加可能出错 0.1 + 0.2 不一定等于 0.3 ,所以不要轻易判断两个浮点数相加
  • e表示  var floatNum = 3.125e7 ;    // 等于 31250000   var floatNum = 3e-17 ;    // 等于 0.000000000000003
NaN ( 特殊类型 , 即 非数值 )
  • 任何数 除以 0 都会返回 NaN .   NaN类型属于特殊类型,不能用来判断,例如 NaN == NaN,isNaN( ) 函数判断 NaN类型
数值转换函数 ( Number( ) , parseInt( ) , parseFloat( ) , 第一个可以转换任何类型,后两个只能转换字符串 )
  • Number : Boolean类型 true 是 1,false 是 0,null 返回 0 , undefined 返回 NaN , 字符串 只有数字例如 “123”则会转换成123,如果是十六进制数  例如  “0xf”则会转变成十进制整数 , 空字符串 转换 0 , 如果字符串包括其他字符则转换成 NaN。( 不常用 )
  • parseInt : 找到第一个非空格字符,如果第一个字符不是数字或负号,返回 NaN,直到碰到第一个不是数字的符号,包括小数点。例如”1234blue”parseInt解析后是 1234,”22.5”解析后是22。(parseInt,这个函数肯定要只返回 Int类型,看名字都看的出 ),各种进制都解析的出。parseInt( “0xAF”, 16 ) 如果你知道是16进制数,还可以象这样提前规定。建议使用这种,清晰明了,例如 parseInt( “10”,2 )  返回 2 , parseInt( “10”, 10 ) 返回 10 ,所以还是指定比较好。
  • parseFloat : 类似 parseInt, 第一个小数点有效,向后的字母或者小数点等都类似 paseInt 无效。
String 类型

单引号, 或双引号定义的字符串, 例如:

var firstName = "niky";

var lastName = 'Kaka';

  • 特殊字面量 : \n 换行,\t 制表,\b 空格,\r 回车,\f 进纸,\\ 斜杠,\' 单引号( ‘He said, \’hey.\’’),\”双引号,\xnn 以16进制表示,\unnn 以16进制的另一种形式显示。
  • length 表示长度,例如:text.length
  • 转换为字符串 有两种形式 1) toString 方法 var age = 11 ; var ageString = age.toString(10) ;  --> 这个10表示10进制数  undefined 和 null没有 toString() 方法   2) String方法,所有值都可以调用,如果该值有 toString方法则调用之,如果是null返回 “null”,如果是undefined返回”undefined”

var num = 10;

alert(num.toString());  // "10" 默认的就是按照10进制数进行转换.

alert(num.toString(2)); // "1010" 这个2 表示是按照2进制数转换, 10的2进制表示就是 "1010"

Object 类型 *
  • JavaScript 的对象其实就是一组数据和功能的集合。var o = new Object() ; 仅仅创建 Object 的实例并没有什么用处,但是 Object类型是所有它的实例的基础 ( class ) , 换句话说 Object 类型所具有的任何属性和方法也同样存在与更具体的对象中。Object 每个实例都具有下列属性和方法:
    • constructor - 保存着用于创建当前对象的函数,构造函数,例如 Object ( ) ;  --> var o = new Object( ) ;
    • hasOwnProperty ( propertyName ) - 用于检查给定的属性在当前对象实例中( 而不是在实例的原型中 ) 是否存在。例如 o.hasOwnProperty( “name” ) ;
    • isPrototypeOf( object ) - 用于检查传入的对象是否是另一个对象的原型
    • propertyIsEnumerable( propertyName ) - 用于检查给定的属性是否能够使用 for-in 语句
    • toString( ) - 返回对象的字符串表示
    • valueOf( ) - 返回对象的字符串,数值,或布尔值表示,通常与 toString( )方法返回相同值 .

 

操作符 : == , != , === , !== ( “55” == 55  返回 true , “55” === 55 返回 false , 前边只判断数值是否相等,后边是数值类型一起判断 )

位操作符:

~ 按位非:

var num1 = 25;   // 二进制       00000000000000000000000000011001  ( 共32位 )

var num2 = ~num1;  // 二进制 11111111111111111111111111100110  ( 共32位 )

& 按位与

var result = 25 & 3;

| 按位或

var result = 25 | 3;

^ 按位异或

var result = 25 ^ 3;

<< 左移

var oldValue = 2;                   // 等于2进制 10

var newValue = oldValue << 5;   // 等于2进制 1000000 , 十进制的 64

左移一次 等于乘以2, 左移5次, 等于乘以5次2, 所以最后结果是 64

>> 右移

var oldValue = 64;                      // 1000000, 64

var newValue = oldValue >> 5;   //  10, 十进制的 2

>>> 无符号右移

布尔操作符:

! 逻辑非

&& 逻辑与

|| 逻辑或

条件操作符:

varibale = boolean_expression ? true_value : faluse_value;

var max = (num1 > num2) ? num1 : num2;

逗号操作符:

var num1 = 1,

     num2 = 2,

     num3 = 3;

switch - case 语句:

switch(i) {

  case 25:

       alert("25");

       break;

   case 26:

       alert("26");

       break;

   default:

       alert("other");

       break;

}

switch 同样支持类似 C 一样的合并功能, 即 case 后不加 break, 那么两个 case 就会结合在一起.

switch (“hello world”) {

    case "hello" + " world":

    case 26:

       alert("number");

       break;

    default:

       alert("others");

       break;

}

以上可以看出, switch 支持各种类型, 变量也好, 常量也好, 很灵活.

switch (true) {

   case num < 0:

      alert("this one is true");

      break;

   case num >= 0 && num <= 10:

     alert("this is true");

     break;

   default:

     alert("others");

     break;

}

4. 函数

不同之处在与参数传递, 解析器不会判断你传递的参数是否正确,数量或数据类型都无所谓, 因为在函数内部有个arguments数组用来接收参数,并且可以在函数内部直接使用,例如直接使用arguments.length, 可以判断究竟传过来的实际参数是哪些.例如 ( 因为JavaScript中的数组可以存放不同类型的多个数据 ) 也就是说,即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个,三个甚至不传递参数。

可以通过判断argument 来执行不同代码

argument
1 function doAdd (num1, num2) {
2   if (arguments.length ==1 ) {
3     alert( num1 + 10 );
4   } else if (arguments.length ==2 ) {
5     alert( arguments[0] + num2 );
6   }
7 }

doAdd( 10 );  // 20

doAdd(30, 20);  // 50

最后:没有传递值的命名参数将自动被赋予 undefined值,这就跟定义了变量但是没初始化一样。

没有重载,一个函数名就是一个函数。如果定义了2个,则下边的会将上边的函数覆盖。上边的函数将不再能够使用。可以模仿重载-->通过不同参数。但本质上是一个函数。

5. 变量声明及命名规则

定义变量时要进行初始化   --> 这样做的好处就是当发现某个变量是 underfined, 则表明此变量是真的未定义而不是未初始化

posted @ 2012-09-18 14:35  神之一招  阅读(293)  评论(0编辑  收藏  举报