JavaScript数据类型是很简洁的
简单数据 : undefined, null, boolean, number, string
复杂数据 : object
注 : 1> JavaScript代码只体现一种形式,就是 function
2> JavaScript是区分大小写的
创建对象
// 对象直接量
var empty = {};
var point = {x: 0, y: 0, "area": "地点"};
// 通过new创建对象
var emptyO = new Object(); // 和 {} 一样
var arrO = new Array();
var date = new Date();
// Object.create() 第一个参数是新对象,第二个是对对象属性进行描述
var o1 = Object.create({x: 1, y: 1});
var o2 = Object.create(null); // 不继承任何属性方法,因此不能使用 toString 或 "+" 等方法
var o3 = Object.create(Object.prototype); // 和 {} 、new Object() 一样
JavaScript 对象 (null除外) 都和另外一个对象相关联,这个对象就是原型,每一个对象都是从原型继承属性
所有通过对象直接量创建的对象都具有同一个原型对象,并可通过 Object.prototype 获取原型对象的引用
通过关键字new 、构造函数、{} 创建的对象都继承自 Object.prototype , new Array() 创建对象的原型就是
Array.prototype,new Date() 创建对象的原型就是 Date.prototype,
Array
Date 都继承自 Object 这就是原型链
Object.keys() 用于返回一个枚举属性名称数组
存取器属性 getter 和 setter
var o = {
data_prop: value,// 普通的数据属性
// 存取器属性都是成对定义的函数
get accessor_prop() { // 只读属性
},
set accessor_prop(value) { // 只写属性,总是返回 undefined
}
};
对象可扩展性
var a = {};
a.x = "1";
if (Object.isExtensible(a)) { // 判断对象是否可扩展
alert("对象可扩展");
} else {
alert("对象不可扩展");
}
Object.preventExtensions(a); // 将对象转换成不可扩展,一旦转换成不可扩展将无法转换回可扩展
if (Object.isExtensible(a)) { // 判断对象是否可扩展
alert("对象可扩展");
} else {
alert("对象不可扩展");
}
a.y = "1"; // 此处将会报错
除此之外还有 Objec
t.seal()
Objec
t.freeze()
序列化对象 : 将对象转换为字符串或将字符串转换为对象
var o = {
a: "1",
"b": 2,
c: {
d: 3,
e: 4
}
};
var oStr = JSON.stringify(o); // 将 对象 转换成 JSON字符串
alert(oStr);
var toO = JSON.parse(oStr); // 将 JSON字符串 转换成 对象
alert(toO);
使用
typeof X
或
typeof(X)
可用于获取元素的数据类型
数组不是基础类型
typeof [] === 'object' 的结果是 true,
如果要判断一个变量 var 是否是数组,需要使用 Array.isArray(var)
undefined :
未定义或未初始化的值
注 : typeof(undefined) 返回时 undefined,可以将 undefined赋值给任何变量或属性,但并不意味着清除该变量,反而会多一个属性
null :
表示空,使用 typeof(null) 返回 object,但 null 并非object,具有 null值得变量也并 非object
boolean : 只能是
true 或者是 false
注 : 1> undefined,null,"",0 转换成的逻辑值都是 false,以及false本身,其它任何东西转换的逻辑值都是true
2> undefined,null,"",0,false 除 undefined==null 之外,其他的都不想等
3> 完全由数字组成的字符串与该字符串表示的只是相等的 如 : "123"==123 是true,但是 "0123" == 0123 返回false,这是由于字符串是以十进制转换即 "0123" 是按十进制转换成数值的,而以0开头的会议八进制处理因此 "0123" != 0123
4> === 表示 全等,也就是 数据值 和 数据类型 都必须相等才返回 true,这样 undefined==null 是 true,undefined===null 是 false,"123"===123 是 false
5> != 全不等 !== 不全等
谨慎对待比较运算,例如如下 :
[1, 2, 3] === [1, 2, 3] // false
{a: 1} === {a: 1} // false
{} === {} // false
注 : 通常将对象称为引用类型,以此来和 JavaScript 的基本类型区分开,对象的值都是引用,对象的比较均是引用的比较,当且仅当引用同一个对象时它们才相等
number
: 表示数字
注 : typeof(NaN) 和 typeof(Infinity)都返回 number,NaN 参与的任何数值计算的结果都是 NaN,而且 NaN != NaN,Infinity / infinity = NaN
string
: 表示字符串
object :
表示对象类型,在 JavaScript 中不管多么复杂的的数据或者是代码都可以组成 object形式的对象
注 : 对象可以是动态添加属性和方法
如 :
<script type="text/javascript">
var lift = {}; // 创建对象
lift.age = 1; // 对象中添加,age属性
lift.say = function () { // 对象中添加方法
alert(this.age);
};
delete lift.age; // 删除属性,也可以用于删除方法
</script>
Math.min() < Math.max() ,因为Math.min() 返回 Infinity, 而 Math.max()返回 -Infinity
delete 用于删除对象属性或者数组元素
var o = {x: 1, y: 2};
alert("'x' in o => " + ("x" in o)); // 'x' in o => true
delete o.x;
alert("'x' in o => " + ("x" in o)); // 'x' in o => false
var a = [1, 2, 3];
alert(" result => " + getArrayStr(a));
alert("2 in a => " + (2 in a) + " result => " + getArrayStr(a));
delete a[1]; // 相当于 a[1] = undefined
alert("2 in a => " + (2 in a) + " result => " + getArrayStr(a));
function getArrayStr(arr) {
var str = "";
for (var i = 0, l = arr.length; i < l; i++) {
str += arr[i] + " ";
}
return str;
}
注 : 全局对象属性无法使用 delete 删除
instanceof : 表示是否是某个类的实例
var d = new Date();
alert(d instanceof Date);