Как проверить, правильно ли у объекта есть свойство в javascript

До даты есть 3 способа проверить, есть ли у объекта свойство:

  • Сравнить с typeof а также undefined,
  • использование hasOwnProperty метод.
  • использование in ключевое слово.

Сравнение с typeof

Проверка, является ли тип свойства неопределенным, является одной из наиболее распространенных практик, когда разработчики проверяют, есть ли у объекта свойство.

typeof функция возвращает строку с именем типа переменной в качестве первого параметра (Boolean, Object, undefined так далее). Поэтому вам нужно будет только сравнить значение свойства, с которым вы хотите "undefined",

var myObject = {
hello: "Hey"
};
if("undefined" === typeof(myObject["hello"])){
// The property DOESN'T exists
}else{
// The property exists
}
// Or ...
if(typeof(myObject.hello) === "undefined"){
// The property DOESN'T exists
}else{
// The property exists
}
// Or ...
if(typeof(myObject.hello) !== "undefined"){
// The property exists
}else{
// The property DOESN'T exists
}

Примечание. Если объект имеет свойство со значением неопределенным, typeof не рекомендуется Чтобы избежать путаницы, используйте hasOwnProperty вместо этого, если вы используете в своих объектах значение undefined вместо null.

hasOwnProperty

У объекта Javascript обычно есть собственный метод hasOwnProperty. Метод hasOwnProperty возвращает логическое значение, указывающее, имеет ли объект указанное свойство в качестве первого параметра.

в отличие от in оператор, этот метод не проверяет цепочку прототипов объекта.

var myObject = {
hello: "This is my hello string"
};
if(myObject.hasOwnProperty("hello")){
// myObject has the hello property
}else{
// myObject doesn't has hello property
}
// False
var hasPropertyHello = myObject.hasOwnProperty("monkey");
// Use hasOwnProperty in arrays too using the index
["hello"].hasOwnProperty(0); // true
// But no the value
["hello"].hasOwnProperty("hello"); // false

в

Оператор in возвращает true, если указанное свойство находится в указанном объекте. Обратите внимание, что вы можете использовать in либо в объекте и массивах.

var myObject = {
hello:"Hello message"
};
if("hello" in myObject){
// Hello property exists
}else{
// Hello property exists
}
// False
var isInObject = ("trello" in myObject);
// Use in in arrays too using the index
(0 in ["hello"]); // true
// But not the value
("hello" in ["hello"]); // false

Какой метод быстрее

Если мы действительно хотим узнать, что быстрее, вы заметите разницу только в том случае, если вы работаете с циклом расширения и огромными объектами.

Согласно тестам, сравнение с typeof кажется, довольно быстро по сравнению с hasOwnProperty а также in,

Сравнение имеет объект

Выполнение предыдущих фрагментов 1000000 (1M) раз показывает, что in а также hasOwnProperty методы занимают примерно вдвое больше времени, необходимого для сравнения с typeof а также undefined,

Наконец, какой метод я должен использовать? Метод не имеет значения, если вы не работаете с огромными наборами данных. Повеселись

Ссылка на основную публикацию
Adblock
detector