<span style= "font-family:arial, Helvetica, Sans-serif;" >var obj = {</span>
' x ': ' xxx ', ' y ': 2};var yz = obj && obj.k && obj.k.z;//So there is no error, if no definition will return Undefinedconsole.log (YZ);// Undefinedyz = obj && obj.x;console.log (yz);//xxx
In out of all the prototype chain properties, hasOwnProperty () out of the prototype chain is not included in the property, encountered for a loop enumeration is to see whether the enumeration propertyisenumerable (), Getownpropertydescriptor () is a great way to do it.
var obj = { ' x ': ' xxx ', ' y ': 2};console.log (' x ' in obj);//trueconsole.log (' toString ' in obj);//trueconsole.log ( Obj.hasownproperty (' x '));//trueconsole.log (Obj.hasownproperty (' toString '));//falseconsole.log ( Obj.propertyisenumerable (' x '));//trueconsole.log (obj.propertyisenumerable (' toString '));// Falseobject.defineproperty (obj, ' z ', {enumerable:false, Value: ' zzz '}); (var item in obj) { console.log (' Item---' + item ')//x Y (because the other properties on the prototype chain are not enumerable, so only X y)}console.log (' z ' in obj);
Console.log (Object.getownpropertydescriptor (obj, ' x '));//See what tags are inside the descriptor
JS attribute detection