@king-
2015-04-12T04:19:09.000000Z
字数 2432
阅读 867
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;}