JavaScript 数据类型 详解

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);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值