屬性名的遍歷

2021-08-17 01:17:26 字數 1788 閱讀 3689

symbol作為屬性名,不會出現在for……in,for……of迴圈中,也不會被object.keys(),object.getownpropertynames(),json.stringify()返回,但是它也不是私有屬性,有乙個object.getownpropertysymbols方法,可以獲取指定物件的所有symbol屬性名。

object.getownpropertysymbols方法返回乙個陣列,成員是當前物件的所有用作屬性名的 symbol 值。

const obj = {};

let a = symbol('a');

let b = symbol('b');

obj[a] = 'hello';

obj[b] = 'world';

const objectsymbols = object.getownpropertysymbols(obj);

objectsymbols

// [symbol(a), symbol(b)]

下面是另乙個例子,object.getownpropertysymbols方法與for...in迴圈、object.getownpropertynames方法進行對比的例子。

const obj = {};

let foo = symbol("foo");

object.defineproperty(obj, foo, );

for (let i in obj)

object.getownpropertynames(obj)

// object.getownpropertysymbols(obj)

// [symbol(foo)]

上面**中,使用object.getownpropertynames方法得不到屬性名,需要使用object.getownpropertysymbols方法。

另乙個新的api,reflect.ownkeys方法可以返回所有型別的鍵名,包括常規鍵名和symbol鍵名。

let obj = ;

reflect.ownkeys(obj)

// ["enum", "nonenum", symbol(my_key)]

由於以symbol值作為名稱的屬性,不會被常規方法遍歷得到。我們可以利用這個特性,為物件定義一些私有的,但又只希望用於內部的方法。

let size = symbol('size');

class collection

add(item)

static sizeof(instance)

}let x = new collection();

collection.sizeof(x) // 0

x.add('foo');

collection.sizeof(x) // 1

object.keys(x) // ['0']

object.getownpropertynames(x) // ['0']

object.getownpropertysymbols(x) // [symbol(size)]

上面**中,物件xsize屬性是乙個 symbol 值,所以object.keys(x)object.getownpropertynames(x)都無法獲取它。這就造成了一種非私有的內部方法的效果。

iOS遍歷類中的屬性名runtime

栗子 有乙個zhhassertnewnew類,類中有兩個屬性 property nonatomic,strong nsstring name property nonatomic,assign int age 1,匯入 import 2,實現方法 void test u int count 0 iv...

JS遍歷物件修改屬性名

根據介面返回資料中number屬性值,對資料進行擷取,並改變屬性名.直接上碼 下面是需要處理的資料 let data 根據number值對資料擷取 var num data.value.number 2 var arr data.value.value.slice 0,num 改變屬性的方法 方法一...

C 遍歷自定義物件,獲取屬性名 屬性值,設定屬性值

physiqueoutmodel physiqueoutmodel new physiqueoutmodel 自定義物件 type t physiqueoutmodel.gettype 獲得該類的type foreach propertyinfo pi in t.getproperties stri...