1、javascript引用放在<body>元素中页面内容的后面,按顺序重上到下执行。
每个语句结尾都要加分号,声明变量名前都必须加var 。例如:var a=0;
2、html立即下载,延期执行script。
<script type="text/javascript" defer="defer" src="example.js"></script>
3、async异步加载HTML和所有script。
<script type="text/javascript" async src="example.js"></script>
4、函数名、变量、操作符都区分大小写;
标识符:函数名、变量名、函数参数、属性名命名第一个字符必须为字母/下划线/$,其他字符可以使字母、下划线、$、数字。
5、//单行注释;
/*
*多行注释
*哈哈
*/
6、严格模式:script标签第一句<script>"use strict"</script>
7、typeof();
var a="hello";
alert(typeof(a)); //"string";
var b=null;
alert(typeof b); //"object"; null被认为是空的对象引用。
alert(typeof(1)); //"number"
8、undefined
已声明但未初始化的变量默认为undefined,所以比较a与undefined字面量时两者相等。
var a;
alert(a==undefined);
未声明的变量报错,例如; alert(age); //产生错误。
aler(null==undefined); //true
9、boolean
数据类型 | 转换为true的值 | 转换为false的值 |
booolean | true | false |
string | 非空字符 | " "空字符 |
number | 非0数字 | 0 NaN |
object | 任何对象 | null |
undefined | undefined |
10、number类型
八进制第一位必须是0.然后是八进制数字序列(0~7)。
例如:var num1=070; //八进制的56
var num2=079; //无效的八进制数值。-解析为79
var num3=08; //无效的八进制数值。-解析为08
var floatNum=3.125e3 //31250000
NaN(not a number),非数值的数值,特点:(1)任何涉及NaN的操作都会返回NaN,因此不会影响其他代码的执行,但在多步计算中有可能导致出错;(2)NaN与任何值都不相等,包括NaN本身。
alert(isNaN("hello")); //true(不可转换成数字)
alert(isNaN(NaN)); //true
alert(isNaN(4)); //false(4是一个数字)
alert(isNaN("4")); //false(可被转换成数字)
alert(isNaN(true)) //false(可以被转换成数值1)
Number()函数
var num1=Number("") //0
var num2=Number(true) //1
var num3=Number(false) //0
var num4=Number(“hello”)//NaN
var number5=Number(undefined) //NaN
var number6=Number(null) //0
var number7=Number(011) //11
Number()函数在转换字符串时复杂且不合理,所以更常用parseInt(),从第个字符开始解析
var num1=parseInt(“”); //NaN
var num2=parseInt("q123"); //NaN
var num3=parseInt(070); //56(八进制)
var num4=parseInt(0xf) //15(十六进制)
var num5=parseInt(11.1) //11(小数点不是数值)
var num6=parseInt(“123blue”) //123
var num7=parseInt("0xAF",16) //175(第二个参数代表:十六进制)
parseFloat()
var num1=parsefloat("123blue") //123
var num1=parsefloat(0xa) //0
var num1=parsefloat("123.1") //123.1
var num1=parsefloat("123.1.1") //123.1
var num1=parsefloat("1.23e2") //123
11、string()类型
var a='hello" //语法错误(左右引号必须匹配)
var num=10;
alert(num.tostring()); //"10"
alert(num.tosrting(2)); //"1010"
alert(num.toString(8)); //"12"
alert(num.toString(10)); //"10"
alert(num.tostring(16)); //"a"
在不知道要转换的是不是null或undefined时,还可以使用string(),String()能将任何类型的值转换成字符串。
String()遵循的规则:(1)如果值有toString()方法,则调用该方法(null和undefined没有toString()方法);(2)如果值是null,则返回“null”;(3)如果值是undefined,返回“undefined”。
12、object()类型
var age=29;
var anotherAge=--age + 2;
alert(age) //28
alert(anotherAge) //30
var num1=2;
var num2=3
var num3=--num1+num2 //4
var num4=num1+num2 //4
var num1=2;
var num2=3
var num3=num1-- + num2 //5
var num4=num1+num2 //4
var a="2" ; a++; //3
var b="haha"; b++ //NaN
var c=false; c++ //1
var d=1.1; d++ //0.100000000009(浮点舍入错误所致)
var f={valueOf:function(){
return 0;
}};
f++; //1
13、布尔操作符
! //非
alert(!“blue”) //false
alert(!!"blue") //true
&& //与
var a;
var b;
var result=a&&b;
a和b任意一个是true ,则返回true;
若第一个操作数是对象,则返回第二个操作数;
若第二个操作数是对象,第一个操作数是true时,才会返回第二个操作数;
若第一个操作数是null,则返回null;
若第一个操作数是NaN,则返回NaN;
若第一个操作数是undefined,则返回undefined;
当第一个操作数是true,第二个操作数未声明时,报错且不向下执行。
当第一个操作数是false,第二个操作数未声明时,返回false。
|| //或
第一个操作数是false,返回第二个操作数。
第一个操作数是对象,返回第一个操作数;
如果连个操作数都是对象,返回第一个操作数;
若两个操作数是null,则返回null;
若两个操作数是NaN,则返回NaN;
若两个操作数是undefined,则返回undefined;
14、乘性操作数乘法
如果有一个操作数不是数值,则调用Number()将其转换为数值,再相乘;
如果有一个操作数是NaN,则结果是NaN;
除法
如果有一个操作数是NaN,则结果是NaN;
如果是0/0,结果是NaN;
任意数/0,结果是Infinity;
如果有一个操作数不是数值,则调用Number()将其转换为数值,再相乘;
余数
被除数/infinity,结果是0;
被除数是0,结果是0;
加性操作符
加法
var result=5+“5”;alert(result); //"55"(数字5被转换成了“5”);
var num1=5;
var num2=3;
var result="hello"+num+num2; //"hello 53"(从左到右顺序相加)
字符串转换成数值
var a="1"
+a=1
-a=-1
var b="2"
b-0
b=2
数值转换成字符串
var c=3
c+""
c="3"
减法
var a=1+true; //2
var b=1+NaN; //NaN
var c=5-""; //5
var d=5-null; //5(null转换为0)
var e=5-"2"; //3
关系操作数
var result=“23”<“3” //true(字符串比较的是字符编码)
var result=“23”<3 //false(字符串和数字比较时,字符串都会转化为数值)
var result=“a”<3 //false(a转化成了NaN)
相等操作符
==
(1)如果一个操作数是布尔值,比较前先将其转换为数值;(false转换为0,true转换为1)
(2)如果一个数是字符串,另一个数是数值,在比较像等之前现将字符串转换为数值;
(3)如果两个操作数都是对象,,则比较他们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false;
(4)如果一个是对象,另一个不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规定进行比较;
(5)在比较相等性之前,不能将null和undefined转换成其他任何值;
(6)null==undefined
(7)如果一个操作数是NaN,则相等操作符返回false;
表达式 | 值 | 表达式 | 值 |
null==undefined | true | undefined==0 | false |
true==1 | true | null==0 | false |
"NaN"==NaN | false | "5"==5 | true |
5==NaN | false | ||
NaN==NaN | false | ||
false==0 | true |
var result=("55"==55) //true
var result=("55"====55) //false
var result=("55"!==55) //false(数据类型不相等)
result1=result2;
var i=0;
var count=10;
while(i<count)
{
alert(i);
i++;
}; //9
var i=0;
var count=10;
while(i<count)
{
alert(i);
i++
};
alert(i); //10
break和continue
var num=0;
for(i=0;i<10;i++){
if(i%5==0){
break;
}
num++
}
alert(num); //4 当i=5,num=4时,i%5==0,break在num递增之前退出循环.
for(i=0;i<10;i++){
if(i%5==0){
continue;
}
num++
}
alert(num); //8
switch(i){
case 1:
alert("1");
break;
case 2:
alert("2");
break;
case 3:
case 4:
alert("3 or 4");
break;
default:
alert("others");
}
switch("hello world"){
case "hell0"+"world":
alert("great");
break;
case "goodbye":
alet("bye");
break;
default:
alert("guagua");
}
var num=25;
switch(true)
{
case num<0;
alert("小于0");
break;
case num>0&&num<=10:
alert("0<num<=10");
break;
default:
alert("大于10");
}
严格模式:(1)函数名/参数名都不能为eval/argument;(2)不能出现命名参数同名的情况。
function add(num1,num2){
if(argument.length==1){
alert(argument[0]+10);
}else if(argument.length==2){
alert(argument[0]+argument[1]);
}
}
当存在两个相同的函数名时,该名字只属于后定义的函数。