JS数据类型:
/**
* JS数据类型:
* 1.基本数据类型:
* String、Number、Boolean、undefined、null
* 2.引用数据类型:
* Object:任意对象
* Array:一种特殊的Object(可执行)
* Function:一种特殊的Object(数值下标)
* 检查数据类型:
* 1.typeof:
* 可以检查:Number/ String/ Boolean/ undefined
* 2.instanceof:
* 检查对象的具体类型
* 3.===:
* 可以检查:Number/ String/ Boolean/ undfined/ null
*/
var str = "I am a String.";
var num = 100;
var bool = true;
var undef = undefined;
var nul = null;
var obj = {
name: "I am a Object."
};
var arr = [1, 2, 3, 4, 5];
var func = function () {
alert("I am a Function.");
};
/**
* typeof检查基本数据类型:
* *typeof返回值类型为String
* typeof不能检查出null
*/
console.log(typeof str, typeof num, typeof bool); //string number boolean
console.log(typeof undef, typeof nul); //undefined object
/**
* typeof检查引用数据类型
* typeof不能检查出Array的具体类型
*/
console.log(typeof obj, typeof arr, typeof func); //object object function
/**
* instanceof检查引用数据类型:
* *instanceof返回值类型为Boolean
* instanceof可以检查Array和Function的具体类型
*/
console.log(obj instanceof Object, arr instanceof Array, func instanceof Function); //true true true
console.log(arr instanceof Object, func instanceof Object); //true true
/**
* ===检查基本数据类型:
* *===返回值类型为Boolean
* ===结合typeof使用
* undefined null为单值,可直接检查
*/
console.log(typeof str === 'string', typeof num === 'number', typeof bool === 'boolean'); //true true true
console.log(undef === undefined, nul === null); //true true
数据类型补充:
/**
* 数据类型补充:
*/
/** 1.undefined和null的区别:
* undefined表示变量已声明但未赋值
* null表示值为null
*/
/** 2.什么时候给变量赋值null:
* 解答如下:
*/
var obj = null; //初始赋值为null,表示将要赋值为对象
obj = {
name: "I am a Object."
};
obj = null; //最后给obj赋值null,浏览器回收垃圾对象
数据与内存地址:
/**
* 引用数据类型中变量名保存地址
*/
var obj = {
name: "I am a Object."
};
var tes = obj; //tes和obj指向同一内存空间
console.log(tes.name, obj.name); //I am a Object. I am a Object.
tes.name = "I am a new Object.";
console.log(tes.name, obj.name); //I am a new Object. I am a new Object.
/**
* 基本数据类型中变量名保存值
*/
var num1 = 1;
var num2 = num1; //取num1的值,并赋值给num2
console.log(num1, num2); //1 1
num2 = 2; //只改变num2,num1不受影响
console.log(num1, num2); //1 2
参数传递:
/**
* 调用函数时,参数转递是值传递
* 基本值[基本数据类型]
* 地址值[引用数据类型]
*/
function func(para) {
para = {
name: "I am a new Object"
}; //参数指向新的Object
}
var obj = {
name: "I am a Object."
};
console.log(obj.name); //I am a Object.
func(obj); //传入obj中保存的地址值
console.log(obj.name); //I am a Object.
/**
*
*/
function exchange(num1, num2) {
var tmp;
tmp = num1;
num1 = num2;
num2 = tmp;
} //传递的是实参的值,而不是变量名的地址,无法交换两个数据
var num1 = 1, num2 = 2;
exchange(num1, num2);
console.log(num1, num2); //1 2