今回は、Web 開発で属性を検出する方法と、Web 開発で属性を検出するための 注意事項 について説明します。以下は実際のケースです。見てみましょう。
null (および未定義) が使用されるシナリオは、次のような
オブジェクト にプロパティが存在するかどうかをチェックする場合です。
// 不好的写法:检测假值if (object[propertyName]) {}// 不好的写法:和null相比较if (object[propertyName] != null) {}// 不好的写法:和undefined比较if (object[propertyName] != undefined) {}
ログイン後にコピー
上記のコードの各判断は、実際には指定された名前の値によってチェックされます。属性値が 0、"" (空の
文字列 )、false、null、未定義などの誤った値の場合、結果が正しくないため、指定された名前が指す属性が存在するかどうかを判断する代わりに属性を使用します。結局のところ、これらはプロパティの法的価値です。たとえば、属性が数値を記録する場合、値はゼロになる可能性があります。この場合、上記コードの最初の判定でエラーとなります。同様に、属性値が null または未定義の場合、3 つの判定すべてでエラーが発生します。
プロパティが存在するかどうかを判断する最良の方法は、in
演算子を使用することです。 in 演算子は、属性が存在するかどうかを判断するだけであり、属性の値を読み取りません。これにより、このセクションで前述したあいまいなステートメントを回避できます。 in 演算子は、インスタンス オブジェクトのプロパティが存在する場合、または がオブジェクトのプロトタイプから を継承する場合に true を返します。例:
var object = { count: 0, related: null};// 好的写法if ("count" in object) { // 这里的代码会执行}// 不好的写法:检测假值if (object["count"]) { // 这里的代码不会执行}// 好的写法if ("related" in object) { // 这里的代码会执行}// 好的写法if (object["related"] != null) { // 这里的代码不会执行}
ログイン後にコピー
インスタンス オブジェクトの特定のプロパティが存在するかどうかだけを確認したい場合は、hasOwnProperty() メソッドを使用します。 Object から継承するすべての JS オブジェクトにはこのメソッドがあり、このプロパティがインスタンスに存在する場合は true を返します (このプロパティがプロトタイプにのみ存在する場合は false を返します)。 IE8 以前のバージョンの IE では、
DOM オブジェクト は Object を継承しないため、このメソッドは含まれていないことに注意してください。つまり、 hasOwnProperty() メソッドを呼び出す前に、DOM オブジェクトが存在するかどうかを確認する必要があります (オブジェクトが DOM ではないことがすでにわかっている場合は、この手順を省略できます)。
// 对于所有非DOM对象来说,这是好的写法if (object.hasOwnProperty("related")) { // 执行这里的代码}// 如果你不确定是否为DOM对象,则这样来写if ("hasOwnProperty" in object && object.hasOwnProperty("related")) { // 执行这里的代码}
ログイン後にコピー
IE8 およびそれ以前のバージョンの IE の状況により、インスタンス オブジェクトのプロパティが存在するかどうかを判断するときに、in 演算子を使用することを好みます。 hasOwnProperty() は、インスタンスのプロパティを判断する必要がある場合にのみ使用されます。プロパティの存在を確認する必要がある場合は、in 演算子または hasOwnProperty() を使用します。こうすることで多くのバグを回避できます。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨書籍:
Web 開発で null 比較を回避する方法
Web 開発で配列を検出する方法
以上がWeb 開発で属性を検出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。