成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript之Object

高勝山 / 450人閱讀

摘要:當(dāng)以非構(gòu)造函數(shù)形式被調(diào)用時(shí),等同于。因此只有字符串會以數(shù)組形式,拷貝入目標(biāo)對象,其他值即數(shù)值字符串和布爾值都不會產(chǎn)生效果。注意,布爾值數(shù)值字符串分別轉(zhuǎn)成對應(yīng)的包裝對象時(shí),它們的原始值都在包裝對象的內(nèi)部屬性上面。擁有布爾值的字段的默認(rèn)值都是。

Object

Object構(gòu)造函數(shù)創(chuàng)建一個(gè)對象包裝器。如果給定值是 null or undefined,將會創(chuàng)建并返回一個(gè)空對象,否則,將返回一個(gè)與給定值對應(yīng)類型的對象。布爾值、數(shù)值、字符串分別轉(zhuǎn)成對應(yīng)的包裝對象時(shí),它們的原始值都在包裝對象的內(nèi)部屬性[[PrimitiveValue]]上面。只有字符串的包裝對象,會產(chǎn)生可枚舉屬性。

當(dāng)以非構(gòu)造函數(shù)形式被調(diào)用時(shí),Object 等同于 new Object()。

方法 Object.assign()

Object.assign(target, ...sources)

target:目標(biāo)對象。sources:(多個(gè))源對象。

該方法用于將所有可枚舉的屬性的值從一個(gè)或多個(gè)源對象復(fù)制到目標(biāo)對象。它將返回目標(biāo)對象。

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目標(biāo)對象自身也會改變。
obj===o1; //true, obj與o1完全相等

注意:

1.拷貝的屬性為源對象自身的并且可枚舉的(包括Symbol 類型的屬性)。

2.若目標(biāo)對象與源對象有同名屬性,或多個(gè)源對象有同名屬性,則后面的屬性會覆蓋前面的屬性。覆蓋時(shí)直接替換。

var target = { a: { b: "c", d: "e" } }
var source = { a: { b: "hello" } }
Object.assign(target, source)
// { a: { b: "hello" } }
//target對象的a屬性被source對象的a屬性整個(gè)替換掉

3.在屬性拷貝過程中產(chǎn)生異常時(shí),該方法會拋出一個(gè) TypeError 異常,拷貝過程中斷,已經(jīng)拷貝成功的屬性不會受到影響,還未拷貝的屬性將不會再被拷貝。

4.Object.assign 會跳過那些值為 null 或 undefined 的源對象。

5.Object.assign方法實(shí)行的是淺拷貝,而不是深拷貝。 也就是說,如果源對象某個(gè)屬性的值是對象,那么目標(biāo)對象拷貝得到的是這個(gè)對象的引用。

var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2
//Object.assign拷貝得到的是這個(gè)對象的引用。這個(gè)對象的任何變化,都會反映到目標(biāo)對象上面。

6.若參數(shù)不是對象,則會先轉(zhuǎn)成對象。由于undefined和null無法轉(zhuǎn)成對象,所以當(dāng)null 和 undefined不在首參數(shù)時(shí),會被忽略。在首參數(shù),則報(bào)錯(cuò)。Object.assign不會拷貝對象的內(nèi)部屬性[[PrimitiveValue]]。因此只有字符串會以數(shù)組形式,拷貝入目標(biāo)對象,其他值(即數(shù)值、字符串和布爾值)都不會產(chǎn)生效果。

var v1 = "abc";
var v2 = true;
var v3 = 10;
var v4 = Symbol("foo")

var obj = Object.assign({}, v1, null, v2, undefined, v3, v4); 
//注意,布爾值、數(shù)值、字符串分別轉(zhuǎn)成對應(yīng)的包裝對象時(shí),它們的原始值都在包裝對象的內(nèi)部屬性[[PrimitiveValue]]上面。只有字符串的包裝對象,會產(chǎn)生可枚舉屬性,這些屬性會被拷貝。因此其他類型的值(即數(shù)值、字符串和布爾值)不在首參數(shù),除了字符串會以數(shù)組形式,拷貝入目標(biāo)對象,其他值都不會產(chǎn)生效果。
console.log(obj); // { "0": "a", "1": "b", "2": "c" }

Object(true) // {[[PrimitiveValue]]: true}
Object(10)  //  {[[PrimitiveValue]]: 10}
Object("abc") // {0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"}

7.Object.assign可以用來處理數(shù)組,但是會把數(shù)組視為對象。

Object.assign([1, 2, 3], [4, 5])
// [4, 5, 3]
//Object.assign把數(shù)組視為屬性名為0、1、2的對象,因此源數(shù)組的0號屬性4覆蓋了目標(biāo)數(shù)組的0號屬性1。

8.拷貝訪問器時(shí),只拷貝其值,訪問器屬性會被轉(zhuǎn)換成數(shù)據(jù)屬性。

var obj = {
  foo: 1,
  get bar() {
    return 2;
  }
};

// copy.bar的值來自obj.bar的getter函數(shù)的返回值 
var copy = Object.assign({}, obj);  // { foo: 1, bar: 2 }

Object.getOwnPropertyDescriptor(copy,"bar");
//{value: 2, writable: true, enumerable: true, configurable: true}
//可以看到bar在obj對象里為存取描述,而在copy對象里面變成了數(shù)據(jù)描述。

可通過以下代碼進(jìn)行完整拷貝。該方法為淺拷貝。

Object.create(
  Object.getPrototypeOf(obj), 
  Object.getOwnPropertyDescriptors(obj) 
);
var t={
      a:{
        a1:11,
        a2:12
      },
      b:2
};
var c=Object.getOwnPropertyDescriptors(t);
var m=Object.create({},c);
m.a.a1=333;
t.a.a1 //333
//可以看到拷貝時(shí)屬性值是淺拷貝
Object.create()

Object.create(proto, [ propertiesObject ])

proto:一個(gè)對象,應(yīng)該是新創(chuàng)建的對象的原型,也可以是null。propertiesObject:可選。該參數(shù)對象是一組屬性與值,該對象的屬性名稱將是新創(chuàng)建的對象的屬性名稱,只能是屬性描述符。propertiesObject也可以是undefined。

該方法使用指定的原型對象及其屬性去創(chuàng)建一個(gè)新的對象。

// 創(chuàng)建一個(gè)以另一個(gè)空對象為原型,且擁有一個(gè)屬性p的對象
o = Object.create({}, { p: { value: 42 } })

// 省略了的屬性特性默認(rèn)為false,所以屬性p是不可寫,不可枚舉,不可配置的:
o.p = 333
o.p
//42

注意:

1.propertiesObject參數(shù)對象不能是 null,并且只有該對象中自身擁有可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。

var a={
 //foo會成為所創(chuàng)建對象的數(shù)據(jù)屬性
  foo:{
    writable:true,
    configurable:true,
    value: 222
  },
  // abc會成為所創(chuàng)建對象的訪問器屬性
  abc: {
    configurable: false,
    get: function() { return 10 },
    set: function(value) {
      console.log("Setting `o.abc` to", value);
    }
  }
};
//原型鏈上的屬性不會出現(xiàn)
a.__proto__={
   bar:{
      writable:true,
      configurable:true,
      value: 555,
      enumerable:true
   }
};
//three屬性可枚舉,因此會出現(xiàn)在o對象中
Object.defineProperty(a,"three",{
     value:{
        value:333
     },
     enumerable:true
});
//four屬性不可枚舉,因此不會出現(xiàn)在o對象中
Object.defineProperty(a,"four",{
     value:{
        value:444
     },
     enumerable:false
})
var o = Object.create(Object.prototype,a);
o //{foo: 222, three: 333}

2.如果 proto參數(shù)不是 null 也不是對象,則拋出一個(gè) TypeError 異常。

Object.defineProperty()

Object.defineProperty(obj, prop, descriptor)

obj:需要被操作的目標(biāo)對象。prop:目標(biāo)對象需要定義或修改的屬性的名稱。descriptor:將被定義或修改的屬性的描述符。

該方法會直接在一個(gè)對象上定義一個(gè)新屬性,或者修改一個(gè)對象的現(xiàn)有屬性, 并返回這個(gè)對象。

對象里目前存在的屬性描述符有兩種主要形式:數(shù)據(jù)描述符和存取描述符。數(shù)據(jù)描述符是一個(gè)擁有可寫或不可寫值的屬性。存取描述符是由一對 getter-setter 函數(shù)功能來描述的屬性。描述符必須是兩種形式之一;不能同時(shí)是兩者。

數(shù)據(jù)描述符的鍵值:configurable,enumerable,value,writable。
存取描述符的鍵值:configurable,enumerable,get,set。

configurable:表示對象的屬性是否可以被刪除,以及除writable和value外的其他特性是否可以被修改。默認(rèn)為 false。如果一個(gè)屬性的 configurable 為 false,則其 writable 特性也只能修改為 false。

 var a={};
 Object.defineProperty(a,"m",
 {enumerable:true,configurable:false,value:111,writable:true});

 //將enumerable改為false,報(bào)錯(cuò)TypeError: Cannot redefine property: m
 Object.defineProperty(a,"m",
 {enumerable:false,configurable:false,value:111,writable:true});

 //將writable改為false,成功
 Object.defineProperty(a,"m",
 {enumerable:true,configurable:false,value:111,writable:false});

 //再將writable改為true,報(bào)錯(cuò)TypeError: Cannot redefine property: m
 Object.defineProperty(a,"m",
 {enumerable:true,configurable:false,value:111,writable:true});

enumerable:表示對象的屬性是否可枚舉。默認(rèn)為 false。

writable:表示對象的屬性是否能被賦值運(yùn)算符改變。默認(rèn)為 false。

注意:

1.當(dāng)描述符中省略某些字段時(shí),這些字段將使用它們的默認(rèn)值。擁有布爾值的字段的默認(rèn)值都是false。value,get和set字段的默認(rèn)值為undefined。定義屬性時(shí)如果沒有g(shù)et/set/value/writable,那它被歸類為數(shù)據(jù)描述符。

var o = {}; // 創(chuàng)建一個(gè)新對象
Object.defineProperty(o, "a", {
  enumerable : true,
  configurable : true
});
Object.getOwnPropertyDescriptor(o,"a")
//{value: undefined, writable: false, enumerable: true, configurable: true}

2.使用點(diǎn)運(yùn)算符和Object.defineProperty()為對象的屬性賦值時(shí),數(shù)據(jù)描述符中的屬性默認(rèn)值是不同的。

var o = {};

o.a = 1;
// 等同于 :
Object.defineProperty(o, "a", {
  value : 1,
  writable : true,
  configurable : true,
  enumerable : true
});


// 另一方面,
Object.defineProperty(o, "a", { value : 1 });
// 等同于 :
Object.defineProperty(o, "a", {
  value : 1,
  writable : false,
  configurable : false,
  enumerable : false
});
Object.defineProperties()

Object.defineProperties(obj, props)
obj:將要被添加屬性或修改屬性的對象。props:該對象的一個(gè)或多個(gè)鍵值對定義了將要為對象添加或修改的屬性的具體配置。

該方法直接在一個(gè)對象上定義新的屬性或修改現(xiàn)有屬性,并返回該對象。

var obj = {};
Object.defineProperties(obj, {
  "property1": {
    value: true,
    writable: true
  },
  "property2": {
    value: "Hello",
    writable: false
  }
  // 等等.
});
alert(obj.property2) //彈出"Hello"
Object.getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor(obj, prop)
obj:需要查找的目標(biāo)對象。prop:目標(biāo)對象內(nèi)屬性名稱(String類型)。

該方法返回指定對象上一個(gè)自有屬性對應(yīng)的屬性描述符。(自有屬性指的是直接賦予該對象的屬性,不需要從原型鏈上進(jìn)行查找的屬性)。即只查找自有屬性。若不存在則返回 undefined。

Object.getOwnPropertyDescriptors()

Object.getOwnPropertyDescriptors(obj)
obj:任意對象。

該方法用來獲取一個(gè)對象的所有自身屬性的描述符。如果沒有任何自身屬性,則返回空對象。

Object.is()

Object.is(value1, value2):確定兩個(gè)值是否相同。
Object.is() 會在下面這些情況下認(rèn)為兩個(gè)值是相同的:

兩個(gè)值都是 undefined

兩個(gè)值都是 null

兩個(gè)值都是 true 或者都是 false

兩個(gè)值是由相同個(gè)數(shù)的字符按照相同的順序組成的字符串

兩個(gè)值指向同一個(gè)對象

兩個(gè)值都是數(shù)字并且

都是正零 +0

都是負(fù)零 -0

都是 NaN

都是除零和 NaN 外的其它同一個(gè)數(shù)字

Object.is()與嚴(yán)格相等運(yùn)算符 === 不同,“===”會把 -0 和 +0 這兩個(gè)數(shù)值視為相同的,還會把兩個(gè) NaN 看成是不相等的。

+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
屬性的遍歷

Object.keys(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的所有可枚舉屬性的鍵名(不含Symbol屬性)。

Object.values(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的所有可枚舉屬性的鍵值(不含Symbol屬性)。

Object.entries(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的所有可枚舉屬性的鍵值對數(shù)組(不含Symbol屬性)。該功能為試驗(yàn)中功能。

for...in:循環(huán)遍歷對象自身的和繼承可枚舉屬性(不含Symbol屬性)。

Object.getOwnPropertyNames(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身可枚舉和不可枚舉屬性的名稱(不含Symbol屬性)。

Object.getOwnPropertySymbols(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身所有symbol屬性的名稱。

Reflect.ownKeys(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身所有屬性的名稱,不管屬性名是Symbol或字符串,也不管是否可枚舉。Reflect.ownKeys的返回值等同于Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj))。

以上的方法遍歷對象的屬性,都遵守同樣的屬性遍歷的次序規(guī)則。

首先遍歷所有屬性名為數(shù)值的屬性,按照數(shù)字排序。

其次遍歷所有屬性名為字符串的屬性,按照生成時(shí)間排序。

最后遍歷所有屬性名為Symbol值的屬性,按照生成時(shí)間排序。

原型

改變一個(gè)對象的 [[Prototype]] 屬性,是一個(gè)非常慢且影響性能的操作。推薦使用 Object.create()創(chuàng)建帶有你想要的[[Prototype]]的新對象。

_proto_

Object.prototype 的 _proto_ 屬性是一個(gè)訪問器屬性??墒褂胈proto_ 進(jìn)行原型的獲取與設(shè)置。但這個(gè)是過時(shí)且不推薦使用的。使用_proto_ 進(jìn)行原型的設(shè)置時(shí),對象應(yīng)是可擴(kuò)展的,不然會拋出一個(gè) TypeError 錯(cuò)誤。

var a={};
Object.preventExtensions(a);
a.__proto__={}
//Uncaught TypeError: # is not extensible
Object.getPrototypeOf()

Object.getPrototypeOf(object):返回指定對象的原型(即內(nèi)部[[Prototype]]屬性的值)。如果沒有繼承屬性,則返回 null 。

Object.setPrototypeOf()

Object.setPrototypeOf(obj, prototype):設(shè)置一個(gè)對象的原型。返回參數(shù)對象本身,即obj對象。

若對象是不可擴(kuò)展的,則會拋出 TypeError異常。如果prototype參數(shù)不是一個(gè)對象或者null(例如,數(shù)字,字符串,boolean,或者 undefined),則什么都不做。否則,該方法將obj的原型修改為新的值。推薦使用該方法來修改對象原型。

如果第一個(gè)參數(shù)不是對象,會自動轉(zhuǎn)為對象。但是由于返回的還是第一個(gè)參數(shù),所以這個(gè)操作不會產(chǎn)生任何效果。由于undefined和null無法轉(zhuǎn)為對象,所以如果第一個(gè)參數(shù)是undefined或null,就會報(bào)錯(cuò)。

Object.setPrototypeOf(1, {}) === 1 // true

Object.setPrototypeOf(undefined, {})
// TypeError: Object.setPrototypeOf called on null or undefined
Object.prototype.isPrototypeOf()

prototypeObj.isPrototypeOf(object):用于測試prototypeObj對象是否存在于object對象的原型鏈上。如果 prototypeObj 為 undefined 或 null,會拋出 TypeError。

凍結(jié)、密封、擴(kuò)展

一個(gè)對象默認(rèn)是可擴(kuò)展的。

Object.freeze()

Object.freeze(obj):凍結(jié)一個(gè)對象,該方法返回被凍結(jié)的對象。凍結(jié)對象的屬性不能進(jìn)行增、刪操作,也不能修改該對象已有屬性的屬性描述符鍵值對。

凍結(jié)對象的所有自身屬性都不可能以任何方式被修改,但對該對象原型沒有影響(即仍可對該對象原型上的屬性進(jìn)行增、刪、改操作)。任何嘗試修改該對象的操作都會失敗,可能是靜默失敗,也可能會拋出異常(嚴(yán)格模式中)。

數(shù)據(jù)屬性的值不可更改,訪問器屬性(有g(shù)etter和setter)也同樣(但由于是函數(shù)調(diào)用,給人的錯(cuò)覺是還是可以修改這個(gè)屬性)。

var theValue=0;
var t={
  get foo(){
    return theValue;
 },
  set foo(v){
    theValue=v;
 }
}
Object.freeze(t);
//不能修改foo屬性的get
Object.defineProperty(t,"foo",{
    get(){
       return 222;
   }
}) //TypeError: Cannot redefine property: foo

//由于foo是訪問器屬性,所以還是可以修改t.foo的值。
t.foo //0
t.foo=3;
t.foo //3

如果一個(gè)屬性的值是個(gè)對象,則這個(gè)對象中的屬性是可以修改的,除非它也是個(gè)凍結(jié)對象。

obj = {
  internal : {}
};
Object.freeze(obj);
obj.internal.a = "aValue";
obj.internal.a  // "aValue"

Object.freeze(obj)操作做了兩件事:1.將對象變成不可擴(kuò)展。2.將對象屬性的configurable和writable變成false。

var a={
    m:111,
    get foo(){
      return 333;
  }
};
var before=Object.getOwnPropertyDescriptors(a);
Object.freeze(a);
var after=Object.getOwnPropertyDescriptors(a);

Object.isFrozen()

Object.isFrozen(obj):判斷一個(gè)對象是否被凍結(jié)。

凍結(jié)對象的特征:

不可擴(kuò)展。

所有自身屬性的configurable為false。

所有自身數(shù)據(jù)屬性(即無getter和setter的屬性)的writable為false。

在 ES6中, 如果參數(shù)不是一個(gè)對象類型,則將被視為一個(gè)凍結(jié)的普通對象,因此會返回 true。但在 ES5 中,會拋出一個(gè) TypeError異常。

Object.isFrozen(1);
// TypeError: 1 is not an object (ES5 code)

Object.isFrozen(1);
// true                          (ES2015 code)
Object.seal()

Object.seal(obj):可以讓一個(gè)對象密封,并返回被密封后的對象。密封對象將會阻止向?qū)ο筇砑有碌膶傩?,并且會將所有已有屬性的可配置性(configurable)置為不可配置(false),其效果就是屬性變的不可刪除,以及一個(gè)數(shù)據(jù)屬性不能被重新定義成為訪問器屬性,或者反之。但是可寫性描述(writable)為可寫(true)的屬性的值仍然可被修改。

嘗試刪除一個(gè)密封對象的屬性或者將某個(gè)密封對象的屬性從數(shù)據(jù)屬性轉(zhuǎn)換成訪問器屬性,結(jié)果會靜默失敗或拋出TypeError 異常(嚴(yán)格模式)。

不會影響從原型鏈上繼承的屬性。但__proto__ 屬性的值也會不能修改。

Object.isSealed()

Object.isSealed(obj):判斷一個(gè)對象是否被密封。

密封對象的特征:

不可擴(kuò)展。

所有自身屬性的configurable為false。

在 ES6中, 如果參數(shù)不是一個(gè)對象類型,則將被視為一個(gè)密封的普通對象,因此會返回 true。但在 ES5 中,會拋出一個(gè) TypeError異常。

Object.isSealed(1);
// TypeError: 1 is not an object (ES5 code)

Object.isSealed(1);
// true                          (ES6 code)
Object.preventExtensions()

Object.preventExtensions(obj):讓一個(gè)對象變的不可擴(kuò)展,也就是永遠(yuǎn)不能再添加新的屬性,并返回該不可擴(kuò)展對象。

如果一個(gè)對象可以添加新的屬性,則這個(gè)對象是可擴(kuò)展的。preventExtensions只能阻止一個(gè)對象不能再添加新的自身屬性,但仍然可以為該對象的原型添加屬性。然而Object.preventExtensions會阻止一個(gè)對象將__proto__屬性重新指向另一個(gè)對象。

嘗試給一個(gè)不可擴(kuò)展對象添加新屬性的操作將會失敗,不過可能是靜默失敗,也可能會拋出 TypeError 異常(嚴(yán)格模式)。在 ECMAScript 5 中可擴(kuò)展的對象可以變得不可擴(kuò)展,但反過來不行。

Object.isExtensible()

Object.isExtensible(obj):判斷一個(gè)對象是否是可擴(kuò)展的。

在 ES6中, 如果參數(shù)不是一個(gè)對象類型,則將被視為一個(gè)不可擴(kuò)展的普通對象,因此會返回 true。但在 ES5 中,會拋出一個(gè) TypeError異常。

Object.isExtensible(1);
// TypeError: 1 is not an object (ES5 code)

Object.isExtensible(1);
// false                         (ES6 code)
其他實(shí)例方法 Object.prototype.hasOwnProperty()

obj.hasOwnProperty(prop):返回一個(gè)布爾值,指示對象是否具有指定的屬性作為自身屬性(即不是從原型鏈上繼承到的屬性)。
prop:要檢測的屬性 字符串名稱或者 Symbol

Object.prototype.toString()

object.toString():返回一個(gè)表示該對象的字符串。

每個(gè)對象都有一個(gè) toString() 方法,當(dāng)對象被表示為文本值時(shí)或者當(dāng)以期望字符串的方式引用對象時(shí),該方法被自動調(diào)用。默認(rèn)情況下,toString() 方法被每個(gè)繼承自O(shè)bject的對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象類型。

let obj = new Object();

obj.toString();           
// 返回 [object Object]

所以可以通過Object.prototype.toString.call(obj)來檢測對象類型。

var toString = Object.prototype.toString;

toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]

//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
Object.prototype.toLocaleString()

obj.toLocaleString():返回調(diào)用 toString() 方法的結(jié)果。

Object.prototype.propertyIsEnumerable()

obj.propertyIsEnumerable(prop):返回一個(gè)布爾值,表明指定的屬性名是否是當(dāng)前對象可枚舉自身屬性。

Object.prototype.valueOf()

object.valueOf():返回指定對象的原始值。

JavaScript 調(diào)用 valueOf() 方法用來把對象轉(zhuǎn)換成原始類型的值(數(shù)值、字符串和布爾值)。 你很少需要自己調(diào)用此函數(shù);當(dāng)遇到一種需要轉(zhuǎn)換成一個(gè)原始值情況時(shí)候, JavaScript 會自動調(diào)用此函數(shù)。

默認(rèn)情況下, valueOf()會被每個(gè)對象Object繼承。每一個(gè)內(nèi)置對象都會覆蓋這個(gè)方法為了返回一個(gè)合理的值,如果對象沒有原始值,valueOf()就會返回對象自身。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87391.html

相關(guān)文章

  • javascript 面向?qū)ο蟀鎵K定義多個(gè)對象屬性以及讀取屬性特性

    摘要:返回值是一個(gè)對象,如果是訪問器屬性,這個(gè)對象的屬性有和如果是數(shù)據(jù)屬性,這個(gè)對象的屬性有和。上一篇面向?qū)ο蟀鎵K之對象屬性下一篇面向?qū)ο蟀鎵K之創(chuàng)建對象 這是 javascript 面向?qū)ο蟀鎵K的第三篇文章,主要講解的是多個(gè)屬性的定義以及讀取屬性的特性。前面這幾章內(nèi)容目的在于加深對對象的理解,這樣可以利于理解后面的原型鏈以及繼承方面的知識,或者你也可以了解一下不一樣的 javascript ...

    wendux 評論0 收藏0
  • 01.javascript數(shù)據(jù)類型

    摘要:新增了第七種類型的值數(shù)值字符串布爾值對象數(shù)據(jù)類型判斷有三種方法,可以判斷一個(gè)值的類型運(yùn)算符運(yùn)算符方法運(yùn)算符運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類型。運(yùn)算符運(yùn)算符返回一個(gè)布爾值,表示對象是否為某個(gè)構(gòu)造函數(shù)的實(shí)例。 1.數(shù)據(jù)類型 JavaScript一共有六種數(shù)據(jù)類型。(ES6新增了第七種Symbol類型的值) 數(shù)值(Number) 字符串(String) 布爾值(boolean) undefin...

    Aceyclee 評論0 收藏0
  • JavaScript ES5Object.create函數(shù)詳解

    介紹 在創(chuàng)建對象的時(shí)候,我們有2種常用方法 一個(gè)是文本標(biāo)記法(var obj = {}),一種是運(yùn)用Object函數(shù)進(jìn)行對象的創(chuàng)建(new Object()). 但是這兩種方式并不是創(chuàng)建的一個(gè)完完全全干干凈凈的對象,這里的干凈只得是沒有繼承鏈. 幸運(yùn)的是,ES5為我們提供了一種創(chuàng)建完全干凈的對象的方法,Object.create函數(shù),接下我將向大家介紹Obje...

    zhaofeihao 評論0 收藏0
  • JavaScript對象屬性

    摘要:盡管的右操作數(shù)是構(gòu)造函數(shù),但計(jì)算過程實(shí)際是檢測了對象的繼承關(guān)系。通過創(chuàng)建的對象使用構(gòu)造函數(shù)的屬性作為它們的原型。 JavaScript之對象屬性 Object.create()繼承 ECMAScript 5定義了一個(gè)名為Object.create()的方法,它創(chuàng)建一個(gè)新對象, 其中第一個(gè)參數(shù)是這個(gè)對象的原型。Object.create()提供第二個(gè)可選參數(shù),用以對對象的屬性進(jìn)行進(jìn)一步描...

    gekylin 評論0 收藏0
  • javascript基礎(chǔ)判斷變量類型

    摘要:判斷變量類型數(shù)據(jù)類型種操作符可能返回的值如下注意的能力有限,其對于類型返回的都是使用場景區(qū)分對象和原始類型要區(qū)分一種對象類型和另一種對象類型可以使用運(yùn)算符或?qū)ο髮傩赃\(yùn)算符用法左邊的運(yùn)算數(shù)是一個(gè)右邊運(yùn)算數(shù)是對象類的名字或者構(gòu)造函數(shù)返回或如果是 判斷變量類型 javaSctipt數(shù)據(jù)類型7種: Number, String, Boolean, Null, Undefined, Object...

    jsdt 評論0 收藏0
  • JavaScript基礎(chǔ)創(chuàng)建對象、原型、原型對象、原型鏈

    摘要:在最開始的時(shí)候,原型對象的設(shè)計(jì)主要是為了獲取對象的構(gòu)造函數(shù)。同理數(shù)組通過調(diào)用函數(shù)通過調(diào)用原型鏈中描述了原型鏈的概念,并將原型鏈作為實(shí)現(xiàn)繼承的主要方法。 對象的創(chuàng)建 在JavaScript中創(chuàng)建一個(gè)對象有三種方式??梢酝ㄟ^對象直接量、關(guān)鍵字new和Object.create()函數(shù)來創(chuàng)建對象。 1. 對象直接量 創(chuàng)建對象最直接的方式就是在JavaScript代碼中使用對象直接量。在ES5...

    wangbjun 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<