1.ECMAScript中的基本数据类型包括undefined、Null、Boolean、Number和String;
2.与其他语言不同,ECMAScript没有为整数和浮点数值分别定义不同的数据类型,Number类型可表示所有数值;
3.ECMAScript中也有一种复杂的数据类型,即Object类型,该类型是这门语言中所有对象的基础类型;
4.严格模式为这门语言中容易出错的地方施加了限制;
5.ECMAScript提供了很对与C及其他类C语言中相同的基本操作符,包括算数操作符、布尔操作符、关系操作符、相等操作符及赋值操作符等;
6.ECMAScript从其他语言借鉴了很多流控制语句,例如if语句、for语句和switch语句等。
7.ECMAScript中的函数与其他语言中的函数有这多不同之处:
1)无须指定函数的返回值,因为任何ECMAScript函数都可以在任何时候返回任何值;
2)实际上,未指定返回值的函数返回的是一个特殊的undefined值;
3)ECMAScript中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式传递的;
4)可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数;
5)由于不存在函数签名的特性,ECMAScript函数不能重载。
function cl(x){
console.log(x);
}
/**
* 3.4 数据类型
*/
var message;
cl(message); //=>undefined
cl(typeof message); //=>undefined
cl(typeof age); //=>undefined
var car=null;
cl(typeof car); //=>object
cl(null==undefined); //=>true
var message="hello world";
//Boolean()函数将对象转换为Boolean值
var messageAsBoolean=Boolean(message);
cl(messageAsBoolean); //=>true
if(message){
cl("Value is true");
}
var floatNum=3.125e7; //等于31250000
var result=Number.MAX_VALUE+Number.MAX_VALUE;
// isFinite()函数判断一个数值是不是有穷的
cl(isFinite(result)); //=>false
cl(NaN==NaN); //=>false
//isNaN()确定这个参数是否"不是数值"
cl(isNaN("10")); //=>false
cl(isNaN("blue")); //=>true
cl(isNaN(true)); //=>false
//Number()、parseInt()、parseFloat()将参数转换为数值
var num1=Number("Hello world!"); //NaN
var num2=Number(""); //0
var num3=Number("00011"); //11
var num4=Number(true); //1
var num5=parseInt("1234blue"); //1234
var num6=parseInt(""); //NaN
var num7=parseInt("0xA"); //10
var num8=parseInt("0xA",10); //0
var num9=parseInt(22.5); //22
var num10=parseInt("070",8); //56
var num11=parseFloat("0xA"); //0
cl(num8);
//toString() 转换为字符串
var age=11;
var ageAsString=age.toString(); //"11"
var num=10;
cl(num.toString(8)); //"12"
//String()函数,将任何类型的值转换为字符串
var value1=true;
var value2=null;
var value3;
cl(String(value1)); //"true"
cl(String(value2)); //"null"
cl(String(value3)); //"undefined"
/**
* 3.5操作符
*/
//3.5.1.1一元操作符:递增递减
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
cl(o);
//3.5.1.2 一元加和减操作符:可用作转换数据类型
var s1="01";
var s2="1.1";
var s3="z";
var b=false;
var f=1.1;
var o={
valueOf:function(){
return -1;
}
};
s1=+s1; //数值1
s2=+s2; //数值1.1
s3=+s3; //NaN
b=+b; //数值0
f=+f; //数值1.1
o=+o; //数值-1
//3.5.2位操作符
//按位非 NOT(~) :数值的反码:操作符的负值减1.
var num1=25;
var num2=~num1;
cl(num2); //=>-26
//按位与 AND(&) :两个都是1时才返回1,否则为0
var result=25 & 3;
cl(result); //=>1
//按位或 OR(|):两个都是0时才返回0,否则为1
var result=25|3;
cl(result); //=>27
//按位异或 XOR(^) :只有一个1时才返回1,否则返回0
var result=25^3;
cl(result); //=>26
//左移(<<): 向左移指定的位数,以0补充空位
var oldValue=2;
var newValue=oldValue<<5; //=>64
//有符号的右移(>>):向右移指定的位数,以符号位的值补充空位
var oldValue=64;
var newValue=oldValue>>5; //=>2
//无符号右移 (>>>):向右移指定的位数,以0补充空位
var oldValue=-64;
var newValue=oldValue>>>5; //=>134217726
//3.5.3 布尔运算符
//逻辑非(!)
cl(!""); //=>true
cl(!0); //=>true
cl(!!12); //=>true
//逻辑与(&&)
var found=false;
//var result=found && someUndefinedVariable;
cl(result); //=>flase
//逻辑或(||)
var found=true;
//var result=found && someUndefinedVariable;
cl(result); //=>true
//var myObject =preferredObject || backupObject;
//3.5.4 乘性操作符 * / %
//3.5.5 加性操作符 + -
var result1=5+"5"; //=>"55"
var result2=5-"5"; //=>0
//3.5.6 关系运算符 > < <= >=
var result="Brick".toLowerCase()<"alphabet".toLowerCase(); //=>false
var result="23"<"3"; //=>true
var result="23"<3; //=>false
var result=NaN<3; //=>false
var result=NaN>=3; //=>false
//3.5.7 相等操作符 == != === !==
//3.5.8 条件操作符
var max=(num1>num2) ? num1:num2;
//3.5.9 赋值操作符 = +=等
//3.5.10 逗号操作符
var num=(5,1,4,8,0); //=>0
//3.6 语句
//3.6.1 if-else语句
//3.6.2 do-while语句
//3.6.3 while语句
//3.6.4 for语句
//3.6.5 for-in语句
for(var proName in window){
document.write(proName);
document.write("<br/>");
}
//3.6.6 label语句
//start:for(var i=0;i<count;i++){
// cl(i);
//}
// 3.6.7 break 和continue语句
// 3.6.8 with语句
with(location){
var qs=search.substring(1);
var hostName=hostname;
var url=href;
}
// 3.6.9 switch语句
// 3.7.1 理解参数
function doAdd(){
var result=0;
for(var i=0;i<arguments.length;i++){
result+=arguments[i];
}
return result;
}
cl(doAdd(5000)); //=>5000
cl(doAdd(5000,6000)); //=>11000
//3.7.2 没有重载