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 就可以定义全局变量, 不推荐这样做.
}
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>
document.write( “Hello \
World !”) ;
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" // 这是一个函数
例如 var car = null;
alert(typeof car); // "object"
单引号, 或双引号定义的字符串, 例如:
var firstName = "niky";
var lastName = 'Kaka';
var num = 10;
alert(num.toString()); // "10" 默认的就是按照10进制数进行转换.
alert(num.toString(2)); // "1010" 这个2 表示是按照2进制数转换, 10的2进制表示就是 "1010"
操作符 : == , != , === , !== ( “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;
}
不同之处在与参数传递, 解析器不会判断你传递的参数是否正确,数量或数据类型都无所谓, 因为在函数内部有个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个,则下边的会将上边的函数覆盖。上边的函数将不再能够使用。可以模仿重载-->通过不同参数。但本质上是一个函数。
定义变量时要进行初始化 --> 这样做的好处就是当发现某个变量是 underfined, 则表明此变量是真的未定义而不是未初始化