ජාවාස්ක්‍රිප්ට් වස්තුවක යතුරක් තිබේදැයි පරීක්ෂා කරන්නේද?


2985

ජාවාස්ක්‍රිප්ට් වස්තුවක හෝ අරාවක කිසියම් යතුරක් තිබේදැයි පරීක්ෂා කරන්නේ කෙසේද?

යතුරක් නොපවතින අතර මම එයට ප්‍රවේශ වීමට උත්සාහ කළහොත් එය අසත්‍යයක් වේවිද? නැත්නම් දෝෂයක් විසි කරන්නද?


2
ජාවාස්ක්‍රිප්ට් හි ඇති සෑම දෙයක්ම (සෑම දෙයක්ම පාහේ) වස්තුවක් හෝ එකක් ලෙස දැමිය හැකිය. At පැට්‍රික් එම් පෙන්වා දුන් ආකාරයටම ව්‍යාජ සහායක අරා බිහි වන්නේ මෙහිදීය.
ඇන්ඩ rew ලාර්සන්

මෙම මිණුම් ලකුණ jsben.ch/#/WqlIl මෙම චෙක්පත ලබා ගන්නේ කෙසේද යන්න පිළිබඳ වඩාත් පොදු ක්‍රම පිළිබඳ දළ විශ්ලේෂණයක් ඔබට ලබා දෙයි.
EscapeNetscape

ඉක්මන් විසඳුමක්, සාමාන්‍යයෙන් මම යන්නේ property.key = property.key || 'some default value'එම යතුර එහි යම් වටිනාකමක් සහිතව
පැවතීමට

Answers:


4141

නිර්වචනය නොකළ-නෙස් සඳහා පරීක්ෂා කිරීම යතුරක් තිබේදැයි පරීක්ෂා කිරීමේ නිවැරදි ක්‍රමයක් නොවේ. යතුර පවතින නමුත් වටිනාකම ඇත්ත වශයෙන්ම තිබේ නම් undefinedකුමක් කළ යුතුද?

var obj = { key: undefined };
obj["key"] !== undefined // false, but the key exists!

ඔබ ඒ වෙනුවට inක්‍රියාකරු භාවිතා කළ යුතුය :

"key" in obj // true, regardless of the actual value

යතුරක් නොපවතී දැයි පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නම්, වරහන් භාවිතා කිරීමට මතක තබා ගන්න:

!("key" in obj) // true if "key" doesn't exist in object
!"key" in obj   // ERROR!  Equivalent to "false in obj"

නැතහොත්, වස්තු නිදර්ශනයේ ගුණාංග සඳහා විශේෂයෙන් පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නම් (සහ උරුම වූ ගුණාංග නොවේ), භාවිතා කරන්න hasOwnProperty:

obj.hasOwnProperty("key") // true

බව ක්රම කාර්ය සාධනය සංසන්දනය කිරීම සඳහා in, hasOwnPropertyසහ ප්රධාන කියන්නේ undefined, මේ බලන්න මිණුම් ලකුණක්


83
අතින් නිර්වචනය නොකළ වටිනාකමක් ඇති දේපලක් තිබීම කිසිසේත්ම තේරුමක් නැත. එය ඇත්ත වශයෙන්ම ඔක්සිමොරොන් එකක් වනු ඇත.
ජොබට්

262
දේපල හිතාමතාම නිර්වචනය නොකිරීමට භාවිතා කිරීමේ අවස්ථා ඇති බව මට විශ්වාසයි.
අටෙස් ගෝරල්

168
වලංගු භාවිත නඩුව: හූනා 1.9.1 [ෆයර්ෆොක්ස් 3.5] ට කවුළුවක් නොමැත. Gecko 1.9.2 [Firefox 3.6] හි මෙම දේපල නිර්වචනය කර නොමැත (හැෂ් වෙනස් වන තුරු). හැෂ් ඉතිහාසය හෝ බ්‍රව්සර් අනුවාදය හඳුනා ගැනීමට විශේෂාංග කිරීම සඳහා යමෙක් window.hasOwnProperty ("onhashchange") භාවිතා කළ යුතුය;
සෑම්ගුඩි

7
PHP හි ද එවැනිම ගැටළුවක් පවතින අතර එහිදී null == කිසිවක් නොමැත: stackoverflow.com/q/418066/372654 සහ අවාසනාවකට මෙන්, ශුන්‍යයට ද එහි භාවිතයක් ඇත.
හැලිල් ඔස්ගර්

82
@ ජොබට් යමක් විකාරයක් නිසා නිෂ්පාදන කේතය තුළ ඔබට එය හමු නොවනු ඇතැයි අදහස් නොවේ. විකාර දේවල් කරන පුස්තකාල බොහොමයක් තිබේ.
ක්‍රෑෂ්වර්ක්ස්

299

ඉක්මන් පිළිතුර

ජාවාස්ක්‍රිප්ට් වස්තුවක හෝ අරාවක කිසියම් යතුරක් තිබේදැයි පරීක්ෂා කරන්නේ කෙසේද? යතුරක් නොපවතින අතර මම එයට ප්‍රවේශ වීමට උත්සාහ කළහොත් එය අසත්‍යයක් වේවිද? නැත්නම් දෝෂයක් විසි කරන්නද?

(සහායක) අරාව ශෛලිය හෝ වස්තු ශෛලිය භාවිතා කර නැතිවූ දේපලකට කෙලින්ම ප්‍රවේශ වීමෙන් නිර්වචනය නොකළ නියතයක් ලැබෙනු ඇත .

මන්දගාමී සහ විශ්වසනීය දී සමාගම සහ hasOwnProperty ක්රමය

මිනිසුන් දැනටමත් මෙහි සඳහන් කර ඇති පරිදි, ඔබට “නිර්වචනය නොකළ” නියතයක් හා සම්බන්ධ දේපලක් සහිත වස්තුවක් තිබිය හැකිය.

 var bizzareObj = {valid_key:  undefined};

එවැනි අවස්ථාවක දී, ඔබ භාවිතා කිරීමට සිදු වනු ඇත hasOwnProperty හෝ දී ප්රධාන ඇත්තටම තිබේ නම් දැන ගැනීමට ක්රියාකරු. නමුත්, නමුත් කුමන මිලකටද?

ඉතින්, මම ඔබට කියමි ...

දී සමාගම සහ hasOwnProperty ජාවාස්ක්රිප්ට් භාවිතා ඉඩකඩම් Descriptor යාන්ත්රණයක් (ජාවා භාෂාවෙන් ජාවා පිළිබිඹු සමාන) ඒ 'ක්රම' වේ.

http://www.ecma-international.org/ecma-262/5.1/#sec-8.10

නම් කරන ලද දේපල ගුණාංග හැසිරවීම සහ ප්‍රතිසංස්කරණය කිරීම පැහැදිලි කිරීම සඳහා දේපල විස්තර වර්ගය භාවිතා කරයි. දේපල විස්තර කිරීමේ වර්ගයේ අගයන් නම් කර ඇති ක්ෂේත්‍ර වලින් සමන්විත වන අතර එහිදී එක් එක් ක්ෂේත්‍රයේ නම ගුණාංග නාමයක් වන අතර එහි අගය 8.6.1 හි නිශ්චිතව දක්වා ඇති අනුරූපී ගුණාංග අගයකි. ඊට අමතරව, ඕනෑම ක්ෂේත්‍රයක් පැවතිය හැකිය.

අනෙක් අතට, වස්තු ක්‍රමයක් හෝ යතුරක් ඇමතීමෙන් ජාවාස්ක්‍රිප්ට් [[ලබා ගන්න]] යාන්ත්‍රණය භාවිතා වේ. එය බොහෝ වේගවත් ය!

මිණුම් ලකුණ

http://jsperf.com/checking-if-a-key-exists-in-a-javascript-array

JS හි යතුරු ප්‍රවේශය සංසන්දනය කිරීම.

ක්රියාකරු තුළ භාවිතා කිරීම
var result = "Impression" in array;

ප්රති result ලය විය

12,931,832 ±0.21% ops/sec      92% slower 
HasOwnProperty භාවිතා කිරීම
var result = array.hasOwnProperty("Impression")

ප්රති result ලය විය

16,021,758 ±0.45% ops/sec     91% slower
මූලද්රව්ය වලට කෙලින්ම ප්රවේශ වීම (වරහන් ශෛලිය)
var result = array["Impression"] === undefined

ප්රති result ලය විය

168,270,439 ±0.13 ops/sec     0.02% slower 
මූලද්රව්ය වලට කෙලින්ම ප්රවේශ වීම (වස්තු ශෛලිය)
var result = array.Impression  === undefined;

ප්රති result ලය විය

168,303,172 ±0.20%     fastest

සංස්කරණය කරන්න: දේපලකට undefinedවටිනාකම පැවරීමට හේතුව කුමක්ද?

එම ප්‍රශ්නය මට ප්‍රහේලිකාවක්. ජාවාස්ක්‍රිප්ට් හි, මෙවැනි ගැටළු වළක්වා ගැනීම සඳහා නොපැමිණෙන වස්තූන් සඳහා අවම වශයෙන් යොමු දෙකක් තිබේ: nullසහ undefined.

nullකිසියම් වස්තු වටිනාකමක් හිතාමතාම නොපැවතීම හෝ කෙටියෙන් කිවහොත් තහවුරු කළ අගය නොමැතිකම නියෝජනය කරන ප්‍රාථමික අගය වේ. අනෙක් අතට, undefinedනොදන්නා අගය (අර්ථ දක්වා නැත). පසුව සමග භාවිතා කල බව නව දේපළක් තිබේ නම් නිසි අගය භාවිතා සලකා nullසඳහනක් වෙනුවට undefinedආරම්භක මොහොතේ දේපල නිසා තහවුරු අගය නොලැබීයාමට.

සසඳන්න:

var a = {1: null}; 
console.log(a[1] === undefined); // output: false. I know the value at position 1 of a[] is absent and this was by design, i.e.:  the value is defined. 
console.log(a[0] === undefined); // output: true. I cannot say anything about a[0] value. In this case, the key 0 was not in a[].

උපදෙස් දෙන්න

undefinedවටිනාකම් සහිත වස්තු වලින් වළකින්න . හැකි සෑම විටම කෙලින්ම පරීක්ෂා nullකර දේපල අගයන් ආරම්භ කිරීමට භාවිතා කරන්න. එසේ නොමැතිනම් මන්දගාමී inක්‍රියාකරු හෝ hasOwnProperty()ක්‍රමය භාවිතා කරන්න.

සංස්කරණය කරන්න: 12/04/2018 - කිසිසේත් අදාළ නොවේ

මිනිසුන් අදහස් දක්වා ඇති පරිදි, ජාවාස්ක්‍රිප්ට් එන්ජින් වල නවීන අනුවාදයන් (ෆයර්ෆොක්ස් හැර) ප්‍රවේශ ගුණාංග සඳහා ප්‍රවේශය වෙනස් කර ඇත. වර්තමාන ක්‍රියාත්මක කිරීම මෙම විශේෂිත අවස්ථාව සඳහා පෙර පැවති ක්‍රියාවලියට වඩා මන්දගාමී වන නමුත් ප්‍රවේශ යතුර සහ වස්තුව අතර වෙනස නොසලකා හැරිය හැකිය.


1
බහුලව භාවිතා වන සියලුම බ්‍රව්සර් වල මෙම සියලු ක්‍රම පිළිගත හැකිද, උදා: IE8 +?
ජස්ටින්

11
මිණුම් සලකුණු කිරීම සඳහා +1. ස්තූතියි, මෙය හරියටම මම සොයා ගැනීමට බලාපොරොත්තු වූ තොරතුරු වේ. කේතයක් ලිවීමට අනිවාර්යයෙන්ම ප්‍රබල තර්කයක් නම්, කිසි විටෙකත් යතුරක් නියම නොකරන හෝ අර්ථ නොදක්වන අගය අඩංගු වේ යැයි අපේක්ෂා නොකරයි .
ටී. ජේ. කොම්ප්ටන්

Underscore.js හි () සංසන්දනය කර ඇති ආකාරය මට කුතුහලයක් ඇති බැවින් මම එය jsperf ( 11 වන අනුවාදය ) ට එකතු කළෙමි . In සහ hasOwnProperty () සමඟ එය මන්දගාමී කණ්ඩායමේ සිටින බව හැරෙනවා.
mpoisot

3
මම එහි පූරක අගය කිරීමට නිර්වචනය නොකළ Set ඇත එක් හේතුවක් මම ඇත්තටම එහි පූරක සිට එම දේපල යතුර මකා කිරීමට අවශ්ය බව, නමුත් එය delete hash[key]වේ වේගය බෙහෙවින් අඩු වඩා hash[key] = undefined . ඇත්ත වශයෙන්ම මෙම අවස්ථාවේ දී මට inක්‍රියාකරු අවශ්‍ය යැයි තේරුමක් නැත , නමුත් එය “අපි සෑම විටම අගය නිර්වචනය නොකිරීමට වගබලා ගත යුතුය” යන්නට ප්‍රති-ආදර්ශයක් ලෙස ක්‍රියා කරයි.
ඇලන් ටම්

1
@ HüseyinYağlı සඳහන් කළ පරිදි, ඔබ jsperf සබැඳිය පරීක්ෂා කරන්නේ නම්, මෙම පිළිතුර මුලින් ලියා ඇති බැවින් බොහෝ බ්‍රව්සර් සඳහා විවිධ ක්‍රම අතර කාර්ය සාධනය සැලකිය යුතු ලෙස වෙනස් වී ඇත. ෆයර්ෆොක්ස් යනු අරාව හෝ වස්තු ක්‍රම භාවිතා කරමින් තවමත් සැලකිය යුතු වාසියක් ඇති කිහිප දෙනාගෙන් එකකි, නමුත් වෙනත් බොහෝ බ්‍රව්සර් සඳහා වෙනස්කම් නොසැලකිලිමත් වේ.
kevinmicke

144

එය නැවත පැමිණේ undefined.

var aa = {hello: "world"};
alert( aa["hello"] );      // popup box with "world"
alert( aa["goodbye"] );    // popup box with "undefined"

undefinedවිශේෂ නියත අගයකි. එබැවින් ඔබට පැවසිය හැකිය, උදා

// note the three equal signs so that null won't be equal to undefined
if( aa["goodbye"] === undefined ) {
    // do something
}

නැතිවූ යතුරු පරීක්ෂා කිරීමට හොඳම ක්‍රමය මෙය විය හැකිය. කෙසේ වෙතත්, පහත දැක්වෙන අදහසක පෙන්වා ඇති පරිදි, න්‍යායාත්මකව ඔබට සත්‍ය වටිනාකම ලබා ගැනීමට අවශ්‍ය වනු ඇත undefined. මට මෙය කිසි විටෙකත් අවශ්‍ය නොවූ අතර මට කවදා හෝ අවශ්‍ය වීමට හේතුවක් ගැන සිතා බැලිය නොහැක, නමුත් සම්පූර්ණත්වය සඳහා, ඔබට inක්‍රියාකරු භාවිතා කළ හැකිය

// this works even if you have {"goodbye": undefined}
if( "goodbye" in aa ) {
    // do something
}

8
යතුර පවතින නමුත් වටිනාකම සැබවින්ම නිර්වචනය කර නොමැති නම් කුමක් කළ යුතුද?
Ates Goral

13
නිර්වචනය නොකළ හා සසඳන විට ඔබ == වෙනුවට === භාවිතා කළ යුතුය, එසේ නොමැති නම් ශුන්‍යය නිර්වචනය නොකළ හා සමාන වේ.
මැතිව් ක්‍රම්ලි

10
ඒලී ඔබේ පිළිතුර සම්පූර්ණයෙන්ම නිවැරදි නැත. කෙසේ වෙතත් (කෙසේ වෙතත් මෙය කිසි විටෙකත් නොකළ යුතුය) නිර්වචනය කිරීම විශේෂ නියත අගයක් නොවන බැවිනි. ඇත්ත වශයෙන්ම, එය වෙන් කර ඇති මූල පදයක් නොවන අතර ඔබට එය නැවත ලිවිය හැකිය, උදාහරණයක් ලෙස කියමු var undefined = 42;. නිර්වචනය නොකළ මුක්කු සඳහා පරීක්ෂා කිරීමේදී ඔබ සැමවිටම භාවිතා කළ යුතුය ((typeof variable) === "undefined").
ssice

1
@ssice undefinedඒ අයියා අනුව, ලිවිය-හැකි ගොනුවක් දේපල නොවේ ecma-international.org/ecma-262/5.1/#sec-15.1.1.3
therealrootuser

1
ජාවාස්ක්‍රිප්ට් හි පෙර සංස්කරණ වලදී, 'නිර්වචනය නොකළ' සහ 'නාන්' යනු විකෘති විචල්‍යයන් වන අතර ඒවා නැවත අර්ථ දැක්විය හැකි හෝ වෙනත් අගයන් පවරනු ලැබේ. මෙය නරක දෙයක් විය. එය ECMAScript 5 හි සවි කර ඇත
jkdev

32

මෙම පිළිගත් පිළිතුර යොමු වස්තූන් . භාවිතා පරෙස්සම් වන්න inක්රියාකරු මත Array දත්ත වෙනුවට යතුරු සොයා ගැනීමට:

("true" in ["true", "false"])
// -> false (Because the keys of the above Array are actually 0 and 1)

අරාව තුළ පවතින මූලද්‍රව්‍ය පරීක්ෂා කිරීම සඳහා: අයිතමයක් ජාවාස්ක්‍රිප්ට් අරාවෙහි තිබේදැයි සොයා ගැනීමට හොඳම ක්‍රමය?


හොඳ කරුණක්, ස්තූතියි. :)
ලූකස් සූසා

29
"key" in obj

අරා යතුරු වලට වඩා බෙහෙවින් වෙනස් වස්තු ගුණාංග අගයන් පමණක් පරීක්ෂා කිරීම විය හැකිය


පංති මූලාකෘතියේ අර්ථ දක්වා ඇති යතුරක් සඳහා ද මෙම කේතය සත්‍ය වනු ඇත: ශ්‍රිතය A () A.}; A.prototype.b = 2; var a = new A (); A හි 'b' සත්‍ය වේ. A.hasOwnProperty ('b') ඇත්ත වශයෙන්ම අසත්‍යය.
ඇලෙක්සැන්ඩර්

24

ජාවාස්ක්‍රිප්ට් වස්තුවක දේපලක් තිබේදැයි පරීක්ෂා කිරීමට ක්‍රම තුනක්:

  1. !!obj.theProperty
    අගය bool බවට පරිවර්තනය කරයි. වටිනාකම trueහැර අන් සියල්ලටම ප්‍රතිලාභfalse
  2. ' theProperty' එය විවෘත දී
    දේපල පවතී නම් සැබෑ එන්නෙමි, කිසිදු එහි අගය ප්රශ්නයක් (පවා හිස්)
  3. obj.hasOwnProperty('theProperty')
    මූලාකෘති දාමය පරීක්ෂා නොකරයි. (සියලු වස්තු ඇති බැවින් toStringක්රමය, 1 වන සහ 2 වන සැබෑ ඒ, ඒ අතර 3 එය මත බොරු ආපසු යා හැක හැරී යනු ඇත.)

යොමුව:

http://book.mixu.net/node/ch5.html


අගය නිර්වචනය නොකළ විට obj.theProperty අසමත් වේ. උදා:var a = {a : undefined, b : null}; !!a.a **will return false**
ARJUN

සමාලෝචනයෙන්: !!obj.thePropertyවස්තුවකට නමක් තිබේදැයි පරීක්ෂා කිරීමට විසඳුමක් නොවේ theProperty. ඕනෑම ව්‍යාජ දේපල වටිනාකමක් සඳහා එය අසමත් වේ undefined, ශුන්‍ය, සංඛ්‍යාත්මක 0හෝ NaNහිස් නූලක්""
traktor53

15

ඔබ underscore.js පුස්තකාලය භාවිතා කරන්නේ නම් වස්තු / අරාව මෙහෙයුම් සරල වේ.

ඔබේ නඩුවේ _.has ක්‍රමය භාවිතා කළ හැකිය. උදාහරණයක්:

yourArray = {age: "10"}

_.has(yourArray, "age")

නැවත සත්‍ය වේ

එහෙත්,

_.has(yourArray, "invalidKey")

වැරදි ලෙස ආපසු එයි


15

පිළිතුර:

if ("key" in myObj)
{
    console.log("key exists!");
}
else
{
    console.log("key doesn't exist!");
}

පැහැදිලි කිරීම:

මෙම inප්රධාන වස්තුව දී පවතී නම් ක්රියාකරු පරීක්ෂා කරනු ඇත. අගය නිර්වචනය කර නොමැතිදැයි ඔබ පරීක්ෂා කර බැලුවහොත්:, if (myObj["key"] === 'undefined')ඔබේ වස්තුවෙහි undefinedවටිනාකම සමඟ යතුරක් පැවතිය හැකි බැවින් ඔබට ගැටළු වලට මුහුණ දිය හැකිය .

එම හේතුව නිසා, මුලින්ම inක්‍රියාකරු භාවිතා කිරීම වඩා හොඳ පුරුද්දක් වන අතර එය පවතින බව ඔබ දැනගත් පසු යතුර තුළ ඇති අගය සංසන්දනය කරන්න.


11

මෙන්න මට බෙහෙවින් ප්‍රයෝජනවත් වන උපකාරක කාර්යයක්

keyExists(key, search)වස්තූන් හෝ අරා තුළ යතුරක් පහසුවෙන් බැලීමට මෙය භාවිතා කළ හැකිය!

ඔබට සොයා ගැනීමට අවශ්‍ය යතුර එය යවා ඔබට එය සොයා ගැනීමට අවශ්‍ය වස්තුව (වස්තුව හෝ අරාව) සොයන්න.

function keyExists(key, search) {
        if (!search || (search.constructor !== Array && search.constructor !== Object)) {
            return false;
        }
        for (var i = 0; i < search.length; i++) {
            if (search[i] === key) {
                return true;
            }
        }
        return key in search;
    }

// How to use it:
// Searching for keys in Arrays
console.log(keyExists('apple', ['apple', 'banana', 'orange'])); // true
console.log(keyExists('fruit', ['apple', 'banana', 'orange'])); // false

// Searching for keys in Objects
console.log(keyExists('age', {'name': 'Bill', 'age': 29 })); // true
console.log(keyExists('title', {'name': 'Jason', 'age': 29 })); // false

එය ඉතා විශ්වාසදායක වන අතර හරස් බ්‍රව්සරය හොඳින් ක්‍රියා කරයි.


7
මෙය තරමක් ව්‍යාකූල බවක් පෙනේ: පළමුව, අරාව සෙවීමේදී මෙම ක්‍රමය යතුරක් නොව වටිනාකමක් පරික්ෂා කරයි. දෙවනුව, ඔබට බිල්ට් Array.indexOfක්‍රමය භාවිතා කළ හැකි විට මෙවැනි පෙළක් හරහා නැවත ක්‍රියා කරන්නේ ඇයි ? (ඔබ වටිනාකමක් සොයන්නේ නම්, එනම්)
නික් එෆ්

9

වැනිලා ජේ

yourObjName.hasOwnProperty(key) : true ? false;

Es2015 හි අවම වශයෙන් එක් දේපලක් වත් තිබේදැයි පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නම්

Object.keys(yourObjName).length : true ? false

7

ES6 විසඳුම

භාවිතා කිරීම Array#someසහ Object.keys. එය ආපසු ඇත සැබෑ ලබා ප්රධාන වස්තුව හෝ පවතී නම් බොරු නම් එය නො.

var obj = {foo: 'one', bar: 'two'};
    
function isKeyInObject(obj, key) {
    var res = Object.keys(obj).some(v => v == key);
    console.log(res);
}

isKeyInObject(obj, 'foo');
isKeyInObject(obj, 'something');

එක් පේළියේ උදාහරණයක්.

console.log(Object.keys({foo: 'one', bar: 'two'}).some(v => v == 'foo'));


1
වස්තුවේ සංඛ්‍යාත්මක නොවන ගුණාංග සඳහා එය අසමත් වනු ඇත.
සිද්

Id සිද් මට උදාහරණයක් දෙන්න.
කාරුණික පරිශීලක

හියර් යූ ගෝ. ඉඩ දෙන්න joshua = {name: 'Joshua', ලිපිනය: 'ලන්ඩන්'}; Object.defineProperty (ජොෂුවා, 'isMarried', {අගය: සත්‍ය, ගණන් කළ හැකි: අසත්‍ය}); console.log (Object.keys (joshua) හි 'isMarried')
සිද්

මම ඔබේ විසඳුම මගේ වස්තුව මත යොදනවා. පළමු ප්‍රතිදානය සඳහා එය සත්‍යයක් විය යුතු නොවේද? console.log (Object.keys (joshua) .සමහර (v => v == 'isMarried')); console.log (joshua.isMarried);
සිද්

1
මට කණගාටුයි නමුත් ඔබ දෙවන කොන්සෝල ප්‍රකාශයේ ප්‍රතිදානය පරීක්ෂා කළාද? Object.defineProperty යනු තිත් අංකනය භාවිතයෙන් දේපල සැකසීමට සමාන වේ.
සිද්

6

අපට භාවිතා කළ හැකිය - hasOwnProperty.call(obj, key);

මෙම underscore.js මාර්ගය -

if(_.has(this.options, 'login')){
  //key 'login' exists in this.options 
}

_.has = function(obj, key) {
  return hasOwnProperty.call(obj, key);
};

5

පරීක්ෂා කිරීමට පහසුම ක්‍රමය නම්

"key" in object

උදාහරණයක් වශයෙන්:

var obj = {
  a: 1,
  b: 2,
}
"a" in obj // true
"c" in obj // false

ප්‍රතිලාභ අගය සත්‍ය ලෙස ඇඟවෙන්නේ වස්තුව තුළ යතුර පවතින බවයි.


4

lodashඔවුන්ගේ ව්‍යාපෘතියට ඇතුළත් කර ඇති අය සඳහා: "ගැඹුරු" යතුරු ලබා ගැනීමට උත්සාහ
කරන ලොඩාෂ් _.ජෙට් ක්‍රමයක් ඇත:

වස්තුවේ මාවතේ අගය ලබා ගනී. නිරාකරණය කළ අගය නිර්වචනය කර නොමැති නම්, පෙරනිමි අගය එහි ස්ථානයට නැවත ලබා දෙනු ලැබේ.

var object = { 'a': [{ 'b': { 'c': 3 } }] };

console.log(
  _.get(object, 'a[0].b.c'),           // => 3
  _.get(object, ['a', '0', 'b', 'c']), // => 3
  _.get(object, 'a.b.c'),              // => undefined 
  _.get(object, 'a.b.c', 'default')    // => 'default'
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>


එම යතුර කොතරම් ගැඹුරුද යන්න නිර්වචනය කර ඇත්දැයි මෙය effectively ලදායී ලෙස පරික්ෂා කරනු ඇති අතර එම යතුර නිර්වචනය කර නොමැති නම් ඔබේ වැඩසටහනේ ප්‍රවාහයට හානියක් විය හැකි දෝෂයක් නොපෙන්වයි.


4

යතුරක් තිබේදැයි මෙය අනිවාර්යයෙන්ම පරික්ෂා නොකරන අතර, එය අගයක සත්‍යතාව පරීක්ෂා කරයි. කුමන undefinedසහ nullයටට.

Boolean(obj.foo)

මම typescript භාවිතා කරන අතර, නූල් භාවිතා නිසා එසේ කැමති මේ විසඳුම මට හොඳින් ක්රියා 'foo' in objහෝ obj.hasOwnProperty('foo') ප්රධාන පවතී හෝ intellisense මට ලබා දෙන්නේ නැත නැද්ද යන්න පරීක්ෂා කිරීමට.


3

වස්තුවක ඕනෑම ගැඹුරකින් ඕනෑම යතුරක් පරික්ෂා කිරීමට ඔබට අවශ්‍ය නම් සහ ව්‍යාජ අගයන් සඳහා ගිණුමක් උපයෝගීතා ශ්‍රිතයක් සඳහා මෙම රේඛාව සලකා බලන්න:

var keyExistsOn = (o, k) => k.split(".").reduce((a, c) => a.hasOwnProperty(c) ? a[c] || 1 : false, Object.assign({}, o)) === false ? false : true;

ප්රතිපල

var obj = {
    test: "",
    locals: {
        test: "",
        test2: false,
        test3: NaN,
        test4: 0,
        test5: undefined,
        auth: {
            user: "hw"
        }
    }
}

keyExistsOn(obj, "")
> false
keyExistsOn(obj, "locals.test")
> true
keyExistsOn(obj, "locals.test2")
> true
keyExistsOn(obj, "locals.test3")
> true
keyExistsOn(obj, "locals.test4")
> true
keyExistsOn(obj, "locals.test5")
> true
keyExistsOn(obj, "sdsdf")
false
keyExistsOn(obj, "sdsdf.rtsd")
false
keyExistsOn(obj, "sdsdf.234d")
false
keyExistsOn(obj, "2134.sdsdf.234d")
false
keyExistsOn(obj, "locals")
true
keyExistsOn(obj, "locals.")
false
keyExistsOn(obj, "locals.auth")
true
keyExistsOn(obj, "locals.autht")
false
keyExistsOn(obj, "locals.auth.")
false
keyExistsOn(obj, "locals.auth.user")
true
keyExistsOn(obj, "locals.auth.userr")
false
keyExistsOn(obj, "locals.auth.user.")
false
keyExistsOn(obj, "locals.auth.user")
true

මෙම NPM පැකේජයද බලන්න: https://www.npmjs.com/package/has-deep-value


3
const object1 = {
  a: 'something',
  b: 'something',
  c: 'something'
};

const key = 's';

// Object.keys(object1) will return array of the object keys ['a', 'b', 'c']

Object.keys(object1).indexOf(key) === -1 ? 'the key is not there' : 'yep the key is exist';

3

'අරාව' ලෝකයේ අපට යම් ආකාරයක යතුරු ලෙස දර්ශක දෙස බැලිය හැකිය. පුදුමයට කරුණක් වන්නේ inක්‍රියාකරු (වස්තුව සඳහා හොඳ තේරීමක් වන) අරා සමඟ ක්‍රියා කිරීමයි. නොපවතින යතුර සඳහා ආපසු ලබා දුන් අගය වේundefined

let arr = ["a","b","c"]; // we have indexes: 0,1,2
delete arr[1];           // set 'empty' at index 1
arr.pop();               // remove last item

console.log(0 in arr,  arr[0]);
console.log(1 in arr,  arr[1]);
console.log(2 in arr,  arr[2]);


2

yourArray.indexOf (yourArrayKeyName)> -1

fruit = ['apple', 'grapes', 'banana']

fruit.indexOf('apple') > -1

සැබෑ


fruit = ['apple', 'grapes', 'banana']

fruit.indexOf('apple1') > -1

බොරු


0

මෙම උදාහරණයෙන් විකෘති මාර්ග අතර වෙනස්කම් පෙන්නුම් කළ හැකිය. ඔබගේ අවශ්‍යතා සඳහා නිවැරදි එකක් තෝරා ගැනීමට එය ඔබට උපකාරී වනු ඇතැයි අපි බලාපොරොත්තු වෙමු:

// Lets create object `a` using create function `A`
function A(){};
A.prototype.onProtDef=2;
A.prototype.onProtUndef=undefined;
var a=new A();
a.ownProp = 3;
a.ownPropUndef = undefined;

// Let's try different methods:

a.onProtDef; // 2
a.onProtUndef; // undefined
a.ownProp; // 3
a.ownPropUndef; // undefined
a.whatEver; // undefined
a.valueOf; // ƒ valueOf() { [native code] }

a.hasOwnProperty('onProtDef'); // false
a.hasOwnProperty('onProtUndef'); // false
a.hasOwnProperty('ownProp'); // true
a.hasOwnProperty('ownPropUndef'); // true
a.hasOwnProperty('whatEver'); // false
a.hasOwnProperty('valueOf'); // false

'onProtDef' in a; // true
'onProtUndef' in a; // true
'ownProp' in a; // true
'ownPropUndef' in a; // true
'whatEver' in a; // false
'valueOf' in a; // true (on the prototype chain - Object.valueOf)

Object.keys(a); // ["ownProp", "ownPropUndef"]

-1

ජාවාස්ක්‍රිප්ට් විනාශ කිරීම සමඟ නව පුදුමාකාර විසඳුමක් :

let obj = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
};

let {key1, key2, key3, key4} = obj;

// key1 = "value1"
// key2 = "value2"
// key3 = "value3"
// key4 = undefined

// Can easily use `if` here on key4
if(!key4) { console.log("key not present"); } // Key not present

ජාවාස්ක්‍රිප්ට් විනාශ කිරීමේ වෙනත් භාවිතයන් පරීක්ෂා කරන්න

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.