首页 > 语言 > JavaScript > 正文

你不知道的 javascript【推荐】

2024-05-06 15:03:19
字体:
来源:转载
供稿:网友

一、对象

JavaScript简单类型有数字、字符串、布尔值、null、undefined,其他所有的值都是对象(数组、函数、正则表达式都是对象)。

数字、字符串、布尔值虽然拥有方法(包装对象),但并不是对象。

包装对象:

每当读取一个基本类型值的时候,后台会创建一个对象的基本包装类型的对象,从而能够调用一些方法来操作这些数据。

var s1 = 'abcdefg' ;var s2 = s1.substring(2) ;

后台自动完成下列处理:

创建String类型的一个实例 在实例上调用指定的方法 销毁这个实例

所以上面代码等同于:

对象字面量

var flight = { airline: "Oceanic", number: 815, departure: {  IATAL: "SYD",  time: "2004-09-22 14:55",  city: "Sydney" }, arrival: {  IATA: "LAX",  time: "2004-09-23 10:42",  city: "Los Angeles" }}

检索

[] : flight['number']. : flight.number

更新

通过赋值语句更新,如果属性名已经存在于对象中,则被替换;如果对象中没有那个属性名,则添加。

stooge['first-name'] = 'Jerome'

引用

对象赋值通过引用来传递,它们永远不会被拷贝。

var a = { name: 'a'}var b = ab.name = 'b'console.log(a.name)  // b

这里牵扯出 JavaScript 深拷贝和浅拷贝的问题

上例是浅拷贝使用Object.create可以进行深拷贝

var a = { name: 'a'}var b = Object.create(a)b.name = 'b'console.log(a.name)  // a

自定义方法深拷贝见下:

var deepCopy= function(source) {  var result={}; for (var key in source) {  result[key] = typeof source[key]==='object'? deepCoyp(source[key]): source[key]; }  return result; }

此时 var b = deepCopy(a) 得到的 b 就和 a 没有引用关系,即修改 b 不会影响 a了

原型

每个对象都连接到一个原型对象,并且从中继承属性。所有通过对象字面量创建的对象都连接到 Object.prototype 这个JavaScript中标准的对象。

创建一个对象时,可以选择某个对象作为它的原型:

var o = {o1:1,o2:function(){alert(1)}}function F(){}F.prototype = ovar f = new F()

反射

使用 hasOwnProperty 检查属性是否是对象独有的,它并不会检查原型链。

flight.hasOwnProperty('number');    //true

枚举

for in 可以遍历对象中所有的属性名(见深拷贝部分)

删除

delete 可以删除对象属性,不会触及原型链中的任何对象

减少全局变量污染

最小化使用全局变量的一个方法是创建唯一一个全局变量:

var App = {}App.stooge = { "first-name": "Joe", "last-name": "Howard"}App.flight = { airline: "Oceanic", number: 815}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选