@king-
2015-04-12T12:19:09.000000Z
字数 2432
阅读 784
web前端开发
Javascript引用其他变量值的时候,如果是基本数据类型
则创建新存储空间,并将值存储到新的空间中;如果是引用数据类型
则不创建新存储空间,只是将变量地址指向已存在的存储空间,可以多个变量指向同一个空间地址(引用传递)
;
基本数据类型:Undefined、Null、Boolean、Number、String
复杂数据类型:Object
引用数据类型:Array Function
Undefined
Undefined类型只有一个值,即特殊的undefined。声明变量但未对其加以初始化时,这个变量的值就是undefined.
Null
Null类型只有一个值,即特殊的null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回"object"的原因.
Boolean
Boolean类型只有两个字面值:true和false。在非全等
【===】
条件下,[0 等于false,非0等于true]/[""
空字符串等于false,非空等于true];判断语句中undefined/null
等价于boolean的false;
Number
Number类型包括了整数和浮点数值,同时包含了一个特殊的值NaN
(非数值 Not a Number)
,
NaN特点:
1. 任何涉及NaN的操作(例如NaN/10)都会返回NaN
2. NaN与任何值都不相等,包括NaN本身。
可以通过Javascript中的isNaN(val)判断val是否为Number,如果是则返回false
,不是则返回true
String
String类型表示由零或多个16位Unicode字符组成的字符序列,字符串可以由单引号(')或双引号(")表示。
Object
对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象.
Object的每个实例都具有下列属性和方法:
●constructor
——保存着用于创建当前对象的函数
●hasOwnProperty(propertyName)
——用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty("name"))
●isPrototypeOf(object)
——用于检查传入的对象是否是另一个对象的原型
●propertyIsEnumerable(propertyName)
——用于检查给定的属性是否能够使用for-in语句来枚举
●toString()
——返回对象的字符串表示
●valueOf()
——返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
Array
单个的变量中存储多个值(可以包含以上的所有数据类型的值).
typeof
:返回一个字符串值,指出该数据的数据类型
instanceof
:返回一个 Boolean 值,指出对象是否是特定类的一个实例(也就是基本数据类型不涉及到instanceof的操作)
//1. typeof 的使用
var num = 123;
typeof num;//return number
//2. instanceof 的使用
var obj = {} //也可以 var obj = new Object();
obj instanceof Object //return true
//3. 证明 instanceof 是指出对象是否是特定类的实例
var fun = function(){};
var f = new fun();
f instanceof fun // return true
数据类型 | typeof | instanceof(Object) | instanceof(Function) | instanceof(Array) |
---|---|---|---|---|
Undefined | undefined | - | - | - |
Null | object | - | - | - |
Boolean | boolean | - | - | - |
Number | number | - | - | - |
String | string | - | - | - |
Object | object | true | false | false |
Function | function | true | true | false |
Array | object | true | false | true |
var a = 123;
var b = a;
console.log(b);// "123"
a = 456;
console.log(b);// "456"
1 . Array数据clone操作
var arr = [1,2,3,4];
var list = arr.slice(0);//使用数组截取方法可以创建新数组
console.log(list);// "[1,2,3,4]"
arr = [0];
console.log(list);// "[1,2,3,4]"
2 . Object数据clone操作
var obj = {a:"123"};
var b = {};
for(var i in obj){
b[i] = obj[i];
}
console.log(b); // Object{a:"123"}
obj.a = "111";
console.log(b); // Object{a:"123"}
完整写法
function clone(obj){
var o;
if( typeof obj == "object"){
if(obj == null){
o = obj;
}else{
if(obj instanceof Array){
o = [];
for(var i = 0; i < obj.length; i++){
o.push(clone(obj[i]));
}
}else{
o = {};
for(var j in obj){
o[j] = clone(obj[j]);
}
}
}
}else{
o = obj;
}
return o;
}