/**
* 基本数据类型
* js指包含五种数据类型:字符串、数字、布尔、NULL对象、undefined
*/
var str = "Hello JavaScript";
var num1 = 12;
var num2 = 1.4;
var bool = true;
var nullType = null;
var undef;
alert(typeof str);
alert(typeof num1);
alert(typeof num2);
alert(typeof bool);
alert(nullType);
alert(typeof undef);
/**
* js中的对象包括基本数据类型、new出来的对象类型、数组、函数
*/
var obj1 = new Object();
obj1.strAttr = str; //属性也是一个对象
obj1.numAttr = num1;
var array1 = new Array("1","2","3");
var func1 = function(){alert("function Obj")};
alert(typeof obj1);
alert(typeof array1);
alert(typeof func1);
/**
* js的自动装箱和拆箱
*/
var strObject = new String("Hello JavaScript"); //字符串对象
alert(typeof strObject);
alert(str.length); //字符串类型自动装箱成字符串对象,拥有length属性
/**
* js弱类型机制
*/
//js是解释型语言,某对象的具体类型是根据上下文来确定的
var weakT1 = 2+"1"; //"21"
var weekT2 = 2+4; //6
//在布尔的上下文中,如果某对象不为空(null或undefind)则为true,否则为false
var boolT3;
if(boolT3.item){
alert("boolT3.item not null");
}else{
boolT3.item = new String("item");
}
//可以使用typeof和instanceof来判断对象的具体类型和实例
function showMessage(message,handle){ //此处handle参数为一个函数
if(typeof handle == "function"){
handle(message);
}else{
throw new Error("second param should be a function");
}
}
//当对象为数组时typeof返回是Object,此时可用instanceof来区分(返回是Array)
/**
* js基本数据类型和引用数据类型区别
*/
var x = 2;
var y = x; //此处赋的是值而非x对象引用,所以y指向内存中某一固定地址
alert(x+"***"+y);
x = 3; //x改变不影响y
alert(x+"***"+y);
var intArray = new Array(1,2,3,4); //js的数组可变长度
var arrayRef = intArray; //此处赋的是对象引用(内存地址),所以arrayRef与intArray指向同一内存地址
intArray.push(5);
alert(arrayRef.toString());
/**
* js运算符
*/
//[]:主要用于数组和访问对象属性
var arrayTe = ["A","B","C"];
alert(arrayTe[0]);
//访问一个对象的属性和方法
var objectTe = {
itemF : "item",
itemM : function(){
alert(this.itemF);
}
};
alert(objectTe[itemF]); //对对象属性的访问使用[]最好,防止属性名中包含.的情况
//如不知某对象的属性和方法,可使用以下方法迭代得到
for(var key in objectTe){
alert(key+":"+objectTe[key]);
}
//==或!= 和===或!==
//==相等:2个对象类型相同时,比较值/对象地址
// 对象类型不同时,null和undefined相等、字符串转为数字再与数字相比较、其中一个为true,转为1(false转为0)再比较、
// 其中一个是对象,一个是字符串/数字,先把对象转为原始值(toString或valueOf函数)再比较、其他返回false
//===等同于:2个对象类型不相同返回false;两个对象类型相同时,比较值或对象地址
var eqObj1 = {
eqFeild:"eqObj1Feild",
toString:function(){ //重写toString函数
return this.eqFeild;
}
};
var eqObj2 = "eqObj1Feild";
alert(eqObj1==eqObj2); //true
alert(eqObj1===eqObj2); //false
alert(1==true); //true
//建议使用等同来比较
// || 用于赋值时(前面为非空则取前面,否则取后面的值)
function Note(name,title){
this.name = name || "死亡笔记";
this.title = title || "Death Note";
this.getName = function() {return this.name};
this.getTitle = function() {return this.title};
}
var n = new Note(null,"L");
alert(n.getName());
alert(n.getTitle());