基本数据类型
ECMAScript 5中简单数据类型:Undefined,Null,Boolean,Number,String,1中复杂类型Object.
typeof操作符:判断变量的数据类型。如果是函数则返回function.
对未经初始化和未经声明的变量执行typeof操作符都将返回undefined。typeof(null)返回object.
可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值。
空字符串,0和NaN,null,undefined会转换为false.
Number类型:
如果八进制的数值超出了范围,那么前导0被忽略,后面的数值被当做十进制数値解析。
var octalNum1 = 070;//有效的八进制数56
var octalNum2 = 079;//无效的八进制数,解析为79.严格模式下会抛出错误。
保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会适时的将浮点数值转换为整数值。例如:
var num1 = 1.;//小数点后面没有数字—解析为1
var num2 = 10.0//解析为10
浮点数值的最好精度是17位小数。但在进行算术计算时其精度远远不如整数。例如0.1+0.2不等于0.3.而是等于0.30000000000000004。所以浮点数计算会产生舍入误差的问题。
数值范围:Number.MIN_VALUE(5e-325)Number.MAX_VALUE(1.7976931348623157e+308)
超过则会被转换为特殊的Infinity值。-Infinity(负无穷) Infinity(正无穷)
可用isFinite()函数判断是否是有穷的。
NaN
即非数值(not a number),是一个特殊的数值。这个数值用来表示一个本来要返回熟知的操作数未返回数值的情况。在ECMAScript,任何数值除以0会返回NaN,因此不会影响其他代码的执行。
任何涉及NaN的操作都会返回NaN.NaN与任何值都不想等,包括他本身。
isNaN()函数:传入任何不能被转换为数值的参数都会返回true.
数值转换:Number(),parseInt(),parseFloat().
parseInt(“1234bule”) = 1234;
parseInt(“”) = NaN;
var num = parseInt(“0xAF”,16)可以传进几进制。
var num = parseInt(“AF”,16)这样也是正确的。
toString()方法默认以十进制格式返回数值的字符串表示。也可以传递基数,可输出二进制、八进制等。例如:
var num = 10;
num.toString(2);//1010
Object类型
每个object都有如下属性和方法:
Constructor:构造函数。
hasOwnProperty(propertyName):检查给定的属性在当前对象实例中是否存在。
isPropertyOf(Object):检查传入的对象是否是另外一个对象的原型。
propertyIsEnumerable(propertyName):检查给定的属性是否能够使用for-in语句来枚举。
toString():返回对象的字符串表示.
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
valueOf():返回对象的字符串、数值、或布尔值表示。
注意:BOM和DOM中的对象都属于宿主对象,不一定会继承object.
var num1 = 25;
var num2 = ~num1;//-26
按位非操作的本质:操作数的负值减一。
var result = 25&3 //1
var result = 25|3 //27
var result = 25^3 //26 按位异或。
var oldValue = 2;
var newValue = oldValue<<5;//向左移动5位。为64.
var newValue2 = newValue>>5;//向右移动5位。为2
var oldValue = 64;
var newValue = oldValue>>>5;//无符号右移,为2
负值的无符号右移与有符号右移是不同的,结果会变得非常之大。。因为无符号移动是以0来填充空位的。
undefinede = 0//false;
null == 0;//false;
null == undefinned;//true;
在比较相等性之前,不能讲null和undefined转换成任何值。
with语句的作用是将代码的作用域设置到一个特定的对象中。例如:
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
//改用with语句。
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = .href;
}
理解ECMAScript函数的参数:
在内部使用一个数组来表示,函数接收到的始终是数组,而不关心数组中包含哪些参数。在函数体内可以通过arguments对象来访问这个参数数组。arguments对象只是与数组类似,并不是Array的实例。
function sayhi(){
alert("hello"+arguments[0] +","+arguments[1]);
alert(arguments.length);
}
function doAdd(num1,num2){
arguments[1] = 10;//num2也会变成10.他们的内存空间是独立的。而且修改命名参数不会改变arguemtns中对应的值。没有传递的命名参数会自动赋予undefined值。
alert(arguments[0]+num2);
}
因此js不存在所谓的重载。