Hướng dẫn dùng object.getownpropertynames JavaScript - use JavaScript object.getownpropertynames

Phương thức Object.getOwnPropertyNames() trả về một mảng của tất cả các thuộc tính (bao gồm các thuộc tính không thể kích hoạt ngoại trừ các thuộc tính sử dụng ký hiệu) được tìm thấy trực tiếp trong một đối tượng nhất định.Object.getOwnPropertyNames() method returns an array of all properties (including non-enumerable properties except for those which use Symbol) found directly in a given object.

Thử nó

Cú pháp

Object.getOwnPropertyNames(obj)

Thông số

obj

Đối tượng có các thuộc tính có thể phản cảm và không thể kích động sẽ được trả về.

Giá trị trả về

Một mảng các chuỗi tương ứng với các thuộc tính được tìm thấy trực tiếp trong đối tượng đã cho.

Sự mô tả

Object.getOwnPropertyNames() Trả về một mảng có các phần tử là các chuỗi tương ứng với các thuộc tính có thể suy giảm và không thể kích thích được tìm thấy trực tiếp trong một đối tượng nhất định obj. Việc đặt hàng của các thuộc tính có thể kích hoạt trong mảng phù hợp với thứ tự được phơi bày bởi một vòng lặp for...in (hoặc bởi

Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"]  (ES2015 code)
0) trên các thuộc tính của đối tượng. Các khóa số nguyên không âm của đối tượng (cả hai có thể phản cảm và không thể kích hoạt) được thêm vào theo thứ tự tăng dần vào mảng trước, theo sau là các phím chuỗi theo thứ tự chèn.

Trong ES5, nếu đối số của phương pháp này không phải là một đối tượng (nguyên thủy), thì nó sẽ gây ra

Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"]  (ES2015 code)
1. Trong ES2015, một đối số không phải đối tượng sẽ bị ép buộc đối với một đối tượng.

Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"]  (ES2015 code)

Ví dụ

Sử dụng object.getOwnPropertyNames ()

const arr = ['a', 'b', 'c'];
console.log(Object.getOwnPropertyNames(arr).sort()); // .sort() is an array method.
// logs ["0", "1", "2", "length"]

// Array-like object
const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.getOwnPropertyNames(obj).sort()); // .sort() is an array method.
// logs ["0", "1", "2"]

// Logging property names and values using forEach()
Object.getOwnPropertyNames(obj).forEach((val, idx, array) => {
  console.log(`${val} -> ${obj[val]}`);
});
// logs
// 0 -> a
// 1 -> b
// 2 -> c

// non-enumerable property
const myObj = Object.create({}, {
  getFoo: {
    value() { return this.foo; },
    enumerable: false,
  }
});
myObj.foo = 1;

console.log(Object.getOwnPropertyNames(my_obj).sort());
// logs ["foo", "getFoo"]

Nếu bạn chỉ muốn các thuộc tính có thể suy giảm, hãy xem

Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"]  (ES2015 code)
0 hoặc sử dụng vòng lặp for...in (lưu ý rằng điều này cũng sẽ trả về các thuộc tính có thể tìm thấy dọc theo chuỗi nguyên mẫu cho đối tượng trừ khi cái sau được lọc với
Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"]  (ES2015 code)
4).

Các mục trên chuỗi nguyên mẫu không được liệt kê:

function ParentClass() {}
ParentClass.prototype.inheritedMethod = function () {};

function ChildClass() {
  this.prop = 5;
  this.method = function () {};
}
ChildClass.prototype = new ParentClass;
ChildClass.prototype.prototypeMethod = function () {};

console.log(Object.getOwnPropertyNames(new ChildClass()));
// ["prop", "method"]

Chỉ nhận được các thuộc tính không đủ

Điều này sử dụng hàm

Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"]  (ES2015 code)
5 để loại bỏ các khóa có thể phản hồi (thu được bằng
Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (ES5 code)

Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"]  (ES2015 code)
0) khỏi danh sách tất cả các phím (thu được bằng Object.getOwnPropertyNames()) do đó chỉ cung cấp các khóa không thể kích hoạt làm đầu ra.

const target = myObject;
const enumAndNonenum = Object.getOwnPropertyNames(target);
const enumOnly = new Set(Object.keys(target));
const nonenumOnly = enumAndNonenum.filter((key) => !enumOnly.has(key));

console.log(nonenumOnly);

Thông số kỹ thuật

Sự chỉ rõ
Đặc tả ngôn ngữ Ecmascript # sec
# sec-object.getownpropertynames

Tính tương thích của trình duyệt web

Bảng BCD chỉ tải trong trình duyệt

Xem thêm