1. オブジェクトに特定の属性が含まれているかどうかを判断する
次のメソッドを使用して、オブジェクトにプロパティが含まれているかどうかを確認できます。
1.in
オペレーター:
演算子を使用して、in
オブジェクトに指定されたプロパティが含まれているかどうかを確認します。オブジェクトとそのプロトタイプ チェーンのすべてのプロパティをチェックします。
const obj = {
name: 'John', age: 25 };
console.log('name' in obj); // 输出: true
console.log('gender' in obj); // 输出: false
2.hasOwnProperty()
方法:
hasOwnProperty()
オブジェクトの組み込みメソッドであり、オブジェクト自体が指定されたプロパティ (プロトタイプ チェーン上のプロパティを除く) を持っているかどうかを確認するために使用されます。
const obj = {
name: 'John', age: 25 };
console.log(obj.hasOwnProperty('name')); // 输出: true
console.log(obj.hasOwnProperty('gender')); // 输出: false
3.undefined
以下を判断するために使用します。
オブジェクトのプロパティにアクセスし、undefined
それを と比較することで、オブジェクトにそのプロパティが含まれているかどうかを知ることができます。
ただし、obj が null または未定義の場合は、エラーが報告されます。
const obj = {
name: 'John', age: 25 };
console.log(obj.name !== undefined); // 输出: true
console.log(obj.gender !== undefined); // 输出: false
4.Object.keys()
使用方法:
Object.keys()
メソッドは、オブジェクト自身の列挙可能なプロパティを含む配列を返します。このメソッドを使用すると、オブジェクトのすべてのプロパティを取得し、指定されたプロパティが返された配列に存在するかどうかを確認できます。
const obj = {
name: 'John', age: 25 };
console.log(Object.keys(obj).includes('name')); // 输出: true
console.log(Object.keys(obj).includes('gender')); // 输出: false
備考: これらのメソッドは、オブジェクトに特定の属性が含まれているかどうかを判断するために、必要に応じて使用できます。最初の 3 つのメソッドはプロパティ値が のundefined
場合にも戻りますtrue
が、最後のメソッドは をundefined
既存のプロパティとして扱いません。
5.Reflect.has(obj , keyName)
使用方法:
Reflect.has(obj, name)
Reflect.has メソッドは、obj の name の in 演算子に対応します。
Reflect.has() メソッドの最初のパラメータがオブジェクトではない場合、エラーが報告されます。
let obj = {
name: '再努力些吧',
age: 18,
work: '前端',
}
// 旧写法
console.log('age' in obj);//true
console.log('sex' in obj);//false
// 新写法
console.log(Reflect.has(obj, 'age'));//true
console.log(Reflect.has(obj, 'sex'));//false
6. propertyIsEnumerable()
hasOwnProperty() の拡張バージョンと同等
このメソッドの使用方法は hasOwnProperty() と同じですが、検出されたプロパティが独自のプロパティ (非継承) であり、そのプロパティが列挙可能な場合にのみ true を返します。
便利な記憶は次のように理解できます。
- in: オブジェクトにプロパティ (プロトタイプ チェーン上のプロパティを含む) が含まれている限り true を返します。
- hasOwnProperty: 最初に条件を満たし、次に、プロパティがプロトタイプ チェーンに属していません。
- propertyIsEnumerable: 第一に、hasOwnProperty が満たされており、第二に、プロパティが Object.defineProperty によって列挙不可能として定義されていません。
/* 如下例子我就不写了引用别人的。作者:Netmad,来源:知乎,
链接:https://www.zhihu.com/question/21907133/answer/378501127 */
function foo() {
this.id = 'id';
}
foo.prototype.common = 'common';
var o = new foo();
'id' in o; // true
'common' in o; // true
'whatever' in o; // false
o.hasOwnProperty('id'); //true
o.hasOwnProperty('common'); //false
o.propertyIsEnumerable('id'); //true
o.propertyIsEnumerable('common'); //false
// 目前为止, hasOwnPerproty和propertyIsEnumerable看上去没啥差别
// 通过Object.defineProperty定义新的属性
Object.defineProperty(o, 'prop', {
value: 'valueOfProp',
enumerable: false
});
o.prop; // valueOfProp
o.hasOwnProperty('prop'); // true
o.propertyIsEnumerable('prop'); //false
// 如果defineProperty时enumerable为true, 那么这里依然和hasOwnProperty一样
上記の方法は、オブジェクトに特定の属性が含まれているかどうかを判断することができ、状況に応じて異なる方法を作業に使用できます。
2. 配列に特定の値が含まれているかどうかを判断する
配列に値が含まれているかどうかを確認するには、いくつかの方法があります。
1.includes()
方法:
includes()
メソッドは、配列に指定された値が含まれているかどうかを確認するために使用され、ブール値を返します。
const arr = [1, 2, 3, 4, 5];
console.log(arr.includes(3)); // 输出: true
console.log(arr.includes(6)); // 输出: false
2.indexOf()
方法:
indexOf()
このメソッドは、配列内で指定された値が最初に出現したインデックスを返します。値が存在しない場合は -1 を返します。
const arr = [1, 2, 3, 4, 5];
console.log(arr.indexOf(3) !== -1); // 输出: true
console.log(arr.indexOf(6) !== -1); // 输出: false
3.find()
方法:
find()
メソッドは、指定されたテスト関数を満たす配列内の最初の要素の値を返すか、何も存在しない場合は返しますundefined
。
const arr = [1, 2, 3, 4, 5];
console.log(arr.find(element => element === 3) !== undefined); // 输出: true
console.log(arr.find(element => element === 6) !== undefined); // 输出: false
4.some()
方法:
some()
このメソッドは、配列内の少なくとも 1 つの要素が指定されたテスト関数に合格するかどうかをテストし、ブール値を返します。
const arr = [1, 2, 3, 4, 5];
console.log(arr.some(element => element === 3)); // 输出: true
console.log(arr.some(element => element === 6)); // 输出: false
備考: これらのメソッドは、配列に特定の値が含まれているかどうかを判断するために、必要に応じて使用できます。最初の 3 つのメソッドは値を比較するときに厳密な等価演算子 ( ===
) を使用しますが、some()
このメソッドは関数をテストすることによって比較を行っていることに注意してください。
5.findIndex()
方法:
戻り値: 条件を満たす要素が見つかった場合はその要素のインデックス(0以上)が返され、条件を満たす要素が見つからなかった場合は-1が返されます。
判定方法:提供によるテスト機能条件を満たす要素が見つかるまで、配列内の各要素が判定されます。
例:
const arr = [1, 2, 3, 4, 5];
console.log(arr.findIndex(element => element === 3)); // 输出: 2
console.log(arr.findIndex(element => element === 6)); // 输出: -1
上記5種類は全てES6増加しました。