1、变量的生命周期
在函数内部声明的变量是局部变量,在函数外部的声明的变量是全局变量,函数内外都能使用。如果在函数内部给一个未定义的变量赋值,则该变量会自动声明为全局变量,但外部要使用这个变量必须在该函数执行之后,因为这时候该变量才被声明了。
//variable's action scope
/*declare in local function is local variable*/
function myFunction(){
var num=3.14;
console.log(num);
}
//console.log(num); //error
var num;
console.log(num);//undefined
myFunction();
/*declare out of function or use in function without declare is global variable*/
function myFunction2(){
character='3';
console.log(character);
}
myFunction2();
console.log(character);
//snap line
var str="hello \
world!";
console.log(str);
2、运算符
javascript的算术运算符有+,-,*,/,%,+=,-=,*=,/=,++,--。数字+数字=数字。数字+字符串结果为字符串。
//operator
console.log((4%3)+3.14/5);
num=10;
console.log(++num);//11
console.log(num);//11
console.log(num--);//11
console.log(num);//10
num*=10;
console.log(num);//100
txt1="hello";
txt2="world!";
txt=txt1+" "+txt2;
console.log(txt);
console.log(5+5);//10
console.log("5"+5);//10
console.log("hello"+5);//hello5
javascript的比较运算符有>,>=,<,<=,==,!=,===,!==。绝对等于===和绝对不不等于的要求比较高,要求操作数的类型和数值完全一样(或不一样),而==和!=则能自动进行类型转换。
javascript的逻辑运算符有&&,||,!。
/*compare operator*/
/*===absolutely equal type and value must same*/
console.log(3=="3");//true
console.log(3==="3");//false
console.log(5>'3' ? 4>2 : 4<2);//true(4>2)
/*logic operator*/
if('a'=="a" && true){
console.log("a=a");
}
if('b'=="b" || false){
console.log("b=b");
}
3、条件语句、循环语句
javascript支持if...else if...else和switch语句。
循环语句支持for,for...in,while和do...while。其中,for...in取的是Key。
continue用于跳出一次循环,break用于完全跳出循环或switch语句,还可以用于跳出label。
//loop
for(var i=0;i<5;i++){
console.log("for loop"+(i+1));
}
var animals=["cat","dog","pig","bird"];
for(var b in animals){
console.log(b);//get the key
console.log(animals[b]);//get the value
}
var person={"name":"wanwu","age":20};
for(p in person){
console.log(person[p]);
}
var cars=[null,"BMW","Volvo","Saab","Ford"];
var i=0;
//cars[0]=undefined or null,while output nothing
while(cars[i]){
console.log(cars[i]);
i++;
}
i=0;
//cars[0]=undefined or null,do while also output all cars
do{
console.log(cars[i]);
i++;
}while(cars[i]);
//break continue
for(var i=0;;i++){
if(i==3){
break;
}
console.log(i);
}
for(i=0;;i++){
if(i==3){
continue;
}
if(i==5){
break;
}
console.log(i);
}
//break label
list:{
console.log(cars[0]);
console.log(cars[1]);
break list;
console.log(cars[2]);
}
4、取变量类型typeof
javascript可以用typeof还取一个变量的数据类型,返回字符串。
这里要注意的是,前面说过javascript把所有东西都当成对象,所以Array和null返回的类型都是object。undefined表示变量未定义,其返回undefined。而每个数据类型其实是某一种对象的构造函数,所以其返回function。
//typeof
console.log(typeof "string");//string
console.log(typeof(3.14));//number
console.log(typeof {});//object
console.log(typeof true);//boolean
/*everything in javascript is object*/
/*typeof array and null is object*/
console.log(typeof([]));//object
console.log(typeof null);//object
/*undefined has nothing*/
console.log(typeof undefined);//undefined
/*data type is a constructor*/
console.log(typeof Boolean);//function
console.log(typeof String);//function
console.log(typeof Array);//function
console.log(typeof(Object));//function
//null and undefined's difference
var person;
console.log(person);//undefined
person=undefined;
console.log(person);//undefined
person=null;
console.log(null);//null
console.log(typeof undefined);//undefined
console.log(typeof null);//object
console.log(undefined==null);//true
console.log(undefined===null);//false
console.log(undefined==false);//false
console.log(undefined===false);//false
console.log(null==false);//false
console.log(null===false);//false