元素 async:表示应立即下载脚本,但不妨碍页面其他操作。只对外部脚本文件有效。
defer:表示脚本可延迟至文档完全被解析和显示后再执行。只对外部脚本文件有效。
src:表示包含要执行代码的外部文件。文件既可以是与包含它的页面位于同一服务器的文件,也可是其他领域中的文件。
type:表示用于编写代码用的脚本语言,默认属性:text/javascript。
注:若不包含defer和async属性,浏览器则会按照
元素在页面中出现的先后进行解析。
元素中页面内容的后面
放在页面
元素中。这样,所有文件的引用放在了相同地方,但浏览器遇到
标签才开始呈现内容,所以要等javascript代码都被下载、解析和执行完后才开始呈现页面内容。导致页面延迟。设置defer=”defer” ,相当于告诉浏览器立即下载,但延迟执行。延迟脚本不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。最好将延迟脚本放在页面底部。
元素当浏览器不支持脚本或脚本被禁用时,浏览器会显示中的内容。
break case catch continue default delete do else
finally for function if in instanceof new return switch
this throw try typeof var void while with
abstract boolean byte char class const debugger
double enum export extends final float goto
implements import int interface long native
package private protected public short static
super synchronized throws transient volatile
Undefined Null Boolean Number String Object
对一个值使用typeof操作符,可能返回下列值:
"undefined"//若这个值未定义;
"boolean"//若这个值是布尔值;
"string"//若这个值是字符串;
"number"//若这个值是数值;
"object"//若这个值是对象或null;
"function"//若这个值是函数;
if(car!=null){
//对car对象执行操作
}
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
string | 任何非空子串 | “”(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | n/a(not applicable 不适用) | undefined |
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false
alert(isNaN("10"));//false(可以被转换成10)
alert(isNaN("blue"));//true
alert(isNaN(true));//false(可被转换为1)
数值转换
Number()函数可用于任何数据类型、parseInt()和parseFloat()函数专门把字符串转换为数值
Number()转换例子
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("00011"); //11
var num4 = Number(true); //1
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA"); //10十六进制
var num4 = parseInt(22.5); //22
var num5 = parseInt("070",16); //56八进制,第二个参数指定进制
var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.35.12"); //22.35
var num5 = parseFloat("0908.5"); //908.5
var num=10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"
alert(num.toString(8)); //"12"
alert(num.toString(16)); //"a"
var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); //"10"
alert(String(value2)); //"true"
alert(String(value3)); //"null"
alert(String(value4)); //undefined
一元操作符:只能操作一个值
var s1="2";
var s2="z";
var b=false;
var f=1.1;
var o={
valueOf:function(){
return -1;
}
};
s1++;//先转换为数字再自加,值变为3
s2++;//值变为NaN
b++;//值变为1
f--;//值变为0.10000000000000009(由于浮点舍入错误所致)
o--;//值变为-2
位操作符
按位非 与 或 异或(同假异真) 左移 有符号右移 无符号右移与C语言相同。
布尔操作符
alert(!false); //true
alert(!"blue"); //非空字符串返回false
alert(!"");//空字符串返回true
alert(!0);//true
alert(!NaN);//NaN返回true
alert(!123);//任何非0数值返回false
逻辑非也可将一个数值转换为与其对应的布尔值。同时使用两个逻辑非操作。
alert(!!false); //false
先看第一个表达式的布尔值结果,若为真,继续看第二个。若只有两个返回第二个表达式。
先看第一个表达式的布尔值结果,若为假,继续看第二个。若只有两个返回第二个表达式。
乘性操作符
操作数 | 结果 |
---|---|
都是数值 | 常规计算,超范围时返回Infinity或-Infinity |
一个是NaN / Infinity与0 | NaN |
Infinity与非0数值 | Infinity或-Infinity |
Infinity与Infinity | Infinity |
有一个数不是数值 | 后台调用Number()将其转为数值,再应用以上规则 |
操作数 | 结果 |
---|---|
都是数值 | 常规计算,超范围时返回Infinity或-Infinity |
一个是NaN / Infinity与Infinity相乘 / 0被0除 | NaN |
非0有限数被0除 / Infinity被任何非零数值除 | Infinity或-Infinity |
有一个数不是数值 | 后台调用Number()将其转为数值,再应用以上规则 |
操作数 | 结果 |
---|---|
都是数值 | 常规计算 |
被除数无限大,除数有限大 / 被除数有限大,除数是0 / Infinity和Infinity | NaN |
被除数有限大,除数无穷大 | 被除数 |
被除数为0 | 0 |
有一个数不是数值 | 后台调用Number()将其转为数值,再应用以上规则 |
加性操作符
操作数 | 结果 |
---|---|
都是数值 | 常规计算 |
有一个是NaN / Infinity加-Infinity | NaN |
Infinity加Infinity | Infinity |
-Infinity加-Infinity | -Infinity |
+0加+0 / -0加-0 / +0加-0 | +0 / -0 / +0 |
两个都是字符串 | 将第二个操作数与第一个操作数拼接 |
一个操作数是字符串 | 将另一个操作数转换为字符串,然后拼接 |
有一个操作数是对象、数值或布尔值 | 调用toString()取得相应字符串值,再应用字符串规则 |
undefined和null | 分别调用String()取得字符串”undefined”和”null” |
这里举个例子:
var num1 = 5;
var num2 = 10;
var message1="The sum of 5 and 10 is" + num1 + num2;
var message2="The sum of 5 and 10 is" + (num1 + num2);
alert(message1); //"The sum of 5 and 10 is 510"
alert(message2); //"The sum of 5 and 10 is 15"
操作数 | 结果 |
---|---|
都是数值 | 常规计算 |
有一个是NaN / -Infinity减-Infinity /Infinity减Infinity | NaN |
Infinity减-Infinity | Infinity |
-Infinity减Infinity | -Infinity |
+0减+0 / -0减-0 / +0减-0 | +0 / +0 / -0 |
有一个是字符串、数值、布尔值、undefined或null | 调用Number()转换为数值,再应用减法规则 |
有一个操作数是对象 | valueOf()取得表示该对象的值,若无valueOf()则用toString() |
关系操作符:<、 >、 <=、 >=
返回值为true或false
var result = "Black"<"apple"; //true B字符编码66,a为97
var result = "Black".toLowercase()<"apple".toLowercase(); //false toLowercase()大写转小写
var result = "23"<"3"; //true 比较字符编码
var result = "23"<3; //false 将"23"转为23
var result = "a"<3; //false a被转换为NaN NaN与任何操作数比较都是NaN
相等操作符:相等(==)和不相等(!=)、全等(===)和不全等(!==)
相等和不相等——先转换再比较
转换规则
var a=("55"==55); //true
全等和不全等——仅比较不转换
全等:两者的值和类型都要相同。null与undefined为不同类型。
var result1 = ("55"==55); //true 转换后相等
var result2 = ("55"===55); //false 数据类型不等
条件操作符(?:) 赋值操作符 逗号操作符 与C语言相同
for-in语句:精准的迭代语句,可以用来枚举对象的属性。
语法:for(property in expression) statement
eg:
for(var propName in window){
document.write(propName)
}
若要迭代的对象变量值为null或undefined,for-in会抛出错误。因此在使用之前要检测对象值不是null或undefined。
lable break continue语句
var num = 0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break outermost; //i与j同时为5时,跳出循环
}
num++;
}
}
alert(num);//55
var num = 0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
continue outermost; //i与j同时为5时,跳到outermost,相当于j少执行了五次
}
num++;
}
}
alert(num);//95
with语句
* 作用:将代码的作用域设置到一个特定的对象中。
* 语法:with (expression) statement;
with(location){
var qs=search.substring(1); //相当于var qs=location.search.substring(1);
var hostName=hostName;//相当于var hostName=location.hostName;
}
with语句虽然暂时简化代码,但js的解释器需要检查with块中的变量是否属于with包含的对象,这将使with语句执行速度大大下降,并且导致js语句很难被优化,因此不常用。
switch case与C语言相同,不过JS中switch语句中可以使用任何数据类型。
function doAdd(num1,num2){
if(arguments.lenght==1){ //若函数只有一个参数传入
alert(num1+10);
}
else if(arguments.lenght==2){ //若函数有两个参数传入
alert(arguments[0]+num2);
}
}