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 声明用语遍历叔祖或者对象的属性 .
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 来执行不同代码
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, 则表明此变量是真的未定义而不是未初始化