لماذا يعتبر كائن و ما هو الفرق بين باطل و غير معروف?
-
03-07-2019 - |
سؤال
لماذا null
يعتبر object
في جافا سكريبت ؟
هو التحقق
if ( object == null )
Do something
نفس
if ( !object )
Do something
?
و أيضا:
ما هو الفرق بين null
و undefined
?
المحلول
(name is undefined)
لك: ما هو name
? (*)
جافا سكريبت: name
?ما هو name
?أنا لا أعرف ما كنت تتحدث عن.لم يرد ذكر أي name
قبل.هل ترى بعض لغة البرمجة على (العميل)الجانب ؟
name = null;
لك: ما هو name
?
جافا سكريبت: أنا لا أعرف.
باختصار ؛ undefined
حيث لا مفهوم الشيء موجود ، ليس لديها أي نوع ، فإنه لم يكن المشار إليه من قبل في هذا النطاق ؛ null
حيث الشيء المعروف في الوجود, لكنه لا يعرف ما القيمة.
شيء واحد أن نتذكر أن null
ليس من الناحية النظرية ، نفس false
أو ""
أو مثل هذا ، حتى لو كانت تساوي بعد نوع الصب ، أي
name = false;
لك: ما هو name
?
جافا سكريبت: منطقية كاذبة.
name = '';
لك: ما هو name
?
جافا سكريبت: سلسلة فارغة
*: name
في هذا السياق يعني كمتغير التي لم تكن محددة.يمكن أن يكون أي متغير غير معرف بيد أن اسم ملك من مجرد عن أي شكل HTML عنصر.فإنه يذهب وسيلة و تم رفعها قبل معرف.ومن المفيد لأن معرفات يجب أن تكون فريدة من نوعها ولكن الأسماء لا يجب أن تكون.
نصائح أخرى
الفرق يمكن تلخيصها في هذا المقتطف:
alert(typeof(null)); // object
alert(typeof(undefined)); // undefined
alert(null !== undefined) //true
alert(null == undefined) //true
التحقق
object == null
يختلف الاختيار if ( !object )
.
هذا الأخير يساوي ! Boolean(object)
, لأن الأحادية !
المشغل تلقائيا يلقي حق المعامل في منطقية.
منذ Boolean(null)
يساوي false ثم !false === true
.
حتى إذا كان الكائن هو not null, ولكن كاذبة أو 0 أو "", الاختيار سوف تمر لأن:
alert(Boolean(null)) //false
alert(Boolean(0)) //false
alert(Boolean("")) //false
null
هو لا كائن, ، بدائية القيمة.على سبيل المثال ، يمكنك إضافة خصائص إلى ذلك.أحيانا الناس يفترضون أنه كائن ، لأن typeof null
يعود "object"
.ولكن هذا هو في الواقع علة (التي قد تكون ثابتة في ECMAScript 6).
الفرق بين null
و undefined
على النحو التالي:
undefined
:المستخدمة من قبل جافا سكريبت يعني "لا قيمة له".غير مهيأ المتغيرات ، المفقودين المعلمات المتغيرات غير معروفة لها تلك القيمة.> var noValueYet; > console.log(noValueYet); undefined > function foo(x) { console.log(x) } > foo() undefined > var obj = {}; > console.log(obj.unknownProperty) undefined
الوصول إلى المتغيرات غير معروفة ، ومع ذلك ، ينتج استثناء:
> unknownVariable ReferenceError: unknownVariable is not defined
null
:المستخدمة من قبل المبرمجين يشير إلى أن "لا قيمة له" ، على سبيل المثالكمعلمة إلى وظيفة.
دراسة متغير:
console.log(typeof unknownVariable === "undefined"); // true
var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true
var bar = null;
console.log(bar === null); // true
كقاعدة عامة, يجب عليك دائما استخدام === وأبدا == في جافا سكريبت (== ينفذ جميع أنواع التحويلات التي يمكن أن تنتج نتائج غير متوقعة).الاختيار x == null
هو حالة الحافة ، لأنه يعمل على حد سواء null
و undefined
:
> null == null
true
> undefined == null
true
وهناك طريقة مشتركة من التحقق من ما إذا كان المتغير له قيمة تحويله إلى منطقية ومعرفة ما إذا كان هو true
.أن التحويل يتم عن طريق if
بيان منطقية المشغل !("لا").
function foo(param) {
if (param) {
// ...
}
}
function foo(param) {
if (! param) param = "abc";
}
function foo(param) {
// || returns first operand that can't be converted to false
param = param || "abc";
}
عيب هذا النهج:كل من القيم التالية تقييم false
, لذا عليك أن تكون حذرا (مثل الشيكات المذكورة أعلاه لا يمكن التمييز بين undefined
و 0
).
undefined
,null
- القيم المنطقية:
false
- أرقام:
+0
,-0
,NaN
- السلاسل:
""
يمكنك اختبار التحويل إلى منطقية باستخدام Boolean
بوصفها وظيفة (عادة هو منشئ ، ليتم استخدامها مع new
):
> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true
ما هو الفرق بين باطل و غير معروف??
الخاصية عندما لا يوجد لديه تعريف محدد.باطل هو كائن.هذا النوع هو كائن.باطل هو قيمة خاصة معنى "لا قيمة لها.غير معرف ليس كائن ، هو نوع غير معرف.
يمكنك تعريف متغير, تعيين إلى null ، وسلوك مطابق إلا أن عليك أن ترى "null" طبعت مقابل "غير معروف".يمكنك حتى مقارنة متغير غير معرف إلى باطل أو العكس بالعكس ، و الشرط سوف يكون صحيحا:
undefined == null
null == undefined
الرجوع إلى جافا سكريبت فرق بين باطل و غير معروف للحصول على مزيد من التفاصيل.
و مع الجديد الخاص بك تحرير نعم
if (object == null) does mean the same if(!object)
عند اختبار إذا كان الكائن هو زائف ، كلاهما فقط تلبية الشرط عند اختبار إذا كاذبة, ولكن ليس عندما الحقيقية
تحقق هنا: جافا سكريبت مسكتك
الجزء الأول من السؤال:
لماذا تعتبر لاغية كائن في جافا سكريبت ؟
بل هو جافا سكريبت تصميم خطأ لا يستطيعون إصلاح الآن.كان ينبغي أن يكون نوع null, لا نوع الكائن أو لا يكون على الإطلاق.فإنه يستلزم إضافية تحقق (ينسى أحيانا) عندما كشف الكائنات حقيقية هو مصدر الخلل.
الجزء الثاني من السؤال:
هو التحقق
if (object == null)
Do something
نفس
if (!object)
Do something
اثنين من الشيكات دائما كل خاطئة ماعدا:
كائن غير معروف أو null:كلاهما صحيح.
الكائن البدائي ، و 0 ،
""
, أو كاذبة:أولا التحقق كاذبة الثاني صحيح.
إذا لم يكن الكائن البدائي ، ولكن الهدف الحقيقي ، مثل new Number(0)
, new String("")
, أو new Boolean(false)
, ثم كل من شيكات مزورة.
حتى إذا "كائن" على أنه يعني كائن حقيقي ثم كلا الشيكات هي دائما نفسها.إذا الأوليات مسموح ثم الشيكات مختلفة 0 ، ""
, و كاذبة.
في حالات مثل object==null
, ، غائما النتائج يمكن أن تكون مصدر الخلل.استخدام ==
لا ينصح أبدا, استخدام ===
بدلا من ذلك.
الجزء الثالث من السؤال:
و أيضا:
ما هو الفرق بين باطل و غير معروف?
في جافا سكريبت ، فارق واحد هو أنه باطل هو من نوع كائن غير معروف من نوع غير معروف.
في جافا سكريبت ، null==undefined
هو صحيح ، و تعتبر متساوية إذا كان نوع هو تجاهلها.السبب في أنها قررت ذلك ، ولكن 0, ""
و كاذبة ليست متساوية ، أنا لا أعرف.يبدو أن التعسفي الرأي.
في جافا سكريبت ، null===undefined
ليس صحيحا منذ النوع يجب أن تكون هي نفسها في ===
.
في الواقع فارغة و غير متطابقة ، حيث أنها تمثل عدم وجود.حتى لا 0 ، ""
في هذا الشأن أيضا, و ربما الحاويات الفارغة []
و {}
.أنواع كثيرة من نفس شيئا وصفة البق.نوع واحد أو لا شيء على الإطلاق هو أفضل.وأود أن محاولة استخدام أقل عدد ممكن.
'false', 'صحيح'،'! ' آخر كيس من الديدان التي يمكن أن تكون مبسطة ، على سبيل المثال ، if(!x)
و if(x)
وحدها كافية, أنت لا تحتاج إلى true و false.
المعلن var x
هو نوع غير معروف إذا كان لا يتم إعطاء قيمة ، ولكن ينبغي أن تكون هي نفسها كما لو كان x أعلنت أبدا على الإطلاق.علة أخرى المصدر فارغة لا شيء الحاوية.لذلك فمن الأفضل أن تعلن تحديد ذلك معا ، var x=1
.
الناس الذهاب جولة وجولة في دوائر تحاول معرفة كل هذه الأنواع المختلفة من لا شيء, ولكن كل هذا مجرد نفس الشيء معقدة في ملابس مختلفة.الواقع هو
undefined===undeclared===null===0===""===[]==={}===nothing
و ربما يجب رمي استثناءات.
var x = null;
x بأنها فارغة
ص ليست محددة بدقة ؛ // لأنني لم تحدد ذلك
if (!x)
باطل هو تقييم كاذبة
طريقة واحدة لجعل الشعور لاغيا وغير محدد هو فهم كل يحدث.
نتوقع null قيمة الإرجاع في الحالات التالية:
طرق الاستعلام دوم
console.log(window.document.getElementById("nonExistentElement")); //Prints: null
سلمان الردود الواردة من طلب اياكس
{
name: "Bob",
address: null
}
وظائف جديدة التي هي في حالة تغير مستمر.التالية بإرجاع null:
var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));
// But this returns undefined:
Object.getOwnPropertyDescriptor({}, "a");
جميع الحالات الأخرى من غير وجود تتم الإشارة إلى غير محددة (كما أشار @أكسل).كل من التالية طباعة "غير معروف":
var uninitalised;
console.log(uninitalised);
var obj = {};
console.log(obj.nonExistent);
function missingParam(missing){
console.log(missing);
}
missingParam();
var arr = [];
console.log(arr.pop());
بالطبع إذا كنت ترغب في كتابة فار unitialised = null ؛ أو العودة فارغة من طريقة نفسك ثم لديك فارغة تحدث في حالات أخرى.ولكن هذا ينبغي أن يكون واضحا جدا.
القضية الثالثة هي عندما تريد الوصول إلى متغير ولكن كنت لا أعرف حتى إذا كان قد تم الإعلان عنها.أن حالة استخدام تشير typeof لتجنب إشارة خطأ:
if(typeof unknown !== "undefined"){
//use unknown
}
في ملخص تحقق فارغة عندما يتم التلاعب دوم التعامل مع اياكس ، أو استخدام بعض ECMAScript 5 الميزات.في جميع الحالات الأخرى أنها آمنة للتحقق من غير معرفة مع المساواة التامة:
if(value === undefined){
// stuff
}
مقارنة بين العديد من الشيكات لاغية مختلفة في جافا سكريبت:
http://jsfiddle.net/aaronhoffman/DdRHB/5/
// Variables to test
var myNull = null;
var myObject = {};
var myStringEmpty = "";
var myStringWhiteSpace = " ";
var myStringHello = "hello";
var myIntZero = 0;
var myIntOne = 1;
var myBoolTrue = true;
var myBoolFalse = false;
var myUndefined;
...trim...
HTTP: // هارون-هوفمان .blogspot.com / 2013 غير معروف جافا سكريبت الصفرية تدقيق-and.html / 04 /
ولاغية وغير معروف على حد سواء كاذبة من أجل المساواة قيمة (خالية == غير معرفة): كلاهما انهيار لقيمة المنطقية كاذبة. فهي ليست نفس الكائن (خالية! == غير محدد).
وغير معروف هو خاصية الكائن العالمي ( "نافذة" في المتصفحات)، ولكن هو نوع بدائي وليس هدف في حد ذاته. انها القيمة الافتراضية للمتغيرات وظائف غير مهيأ إنهاء دون بيان العودة.
وباطل هو مثيل كائن. يستخدم لاغية لأساليب DOM التي ترجع الأجسام جمع للإشارة إلى نتيجة فارغة، والذي يوفر قيمة خاطئة دون يشير إلى خطأ.
وبعض توضيحات:
ولاغية وغير معروف <م> هي م> قيمتين مختلفة. واحد يمثل غياب قيمة لاسم والآخر يمثل عدم وجود الاسم.
وماذا يحدث في if
يذهب على النحو التالي لif( o )
:
ويتم تقييم التعبير في الأقواس س، ومن ثم ركلات if
في قيمة التعبير في أقواس إرغامه نوع - في حالتنا o
وFalsy (التي سوف تحصل قسرا إلى false) القيم في جافا سكريبت هي: <م> ''، لاغية، غير معروف، 0، وكاذبة م>.
لإضافة إلى إجابة ل<م> ما هو differrence بين undefined
وnull
م>، من جافا سكريبت دليل قاطع على في هذه الصفحة :
وكنت قد تنظر undefined
لتمثيل على مستوى النظام، غير متوقع،
أو خطأ مثل absense القيمة وnull
لتمثيل على مستوى البرامج،
غياب العادي، أو المتوقع للقيمة. إذا كنت بحاجة إلى تعيين أحد
هذه القيم إلى متغير أو الممتلكات أو تمر واحدة من هذه القيم ل
وظيفة، null
يكاد يكون دائما الخيار الصحيح.
وتظهر الدالة التالية لماذا وقادرة على العمل بها الفرق:
function test() {
var myObj = {};
console.log(myObj.myProperty);
myObj.myProperty = null;
console.log(myObj.myProperty);
}
إذا كنت استدعاء
test();
أنت الحصول على
<اقتباس فقرة>غير معروف
وباطلة
اقتباس فقرة> ووconsole.log(...)
أولا يحاول الحصول على myProperty
من myObj
في حين لم يتم تحديده حتى الآن - وذلك يعود "غير معروف". بعد تعيين لاغية لها، وconsole.log(...)
الثانية يعود الواضح "لاغية" بسبب myProperty
موجودا، لكنه لا يملك null
القيمة المخصصة لذلك.
في أجل أن تكون قادرة على الاستعلام هذا الاختلاف، وnull
جافا سكريبت وundefined
: بينما null
هو - تماما كما في لغات أخرى كائن، undefined
لا يمكن أن يكون كائن لأنه لا يوجد سبيل المثال (حتى لا مثيل null
) متوفرة.
وnull
هو كائن. نوعه لاغيا. undefined
ليس كائن. نوعه غير معرف.
وعلى سبيل المثال window.someWeirdProperty
غير محددة، لذلك
و"window.someWeirdProperty === null"
بتقييم إلى false في حين
و"window.someWeirdProperty === undefined"
تقييم إلى true.
وif (!o)
checkif وعلاوة على ذلك ليست هي نفسها كما فحص if (o == null)
لo
يجري false
.
والشيء متعة أخرى حول لاغية، مقارنة مع غير معروف، غير أنه يمكن زيادة.
x = undefined
x++
y = null
y++
console.log(x) // NaN
console.log(y) // 0
وهذا مفيد لتحديد القيم العددية الافتراضية للعدادات. كم عدد المرات التي قمت بتعيين متغير إلى -1 في إعلانها؟
في جافا سكريبت null
ليس object
نوع هو primitave
نوع.
ما هو الفرق ؟
غير معرف يشير إلى مؤشر أن لم يتم تعيين.Null يشير إلى مؤشر فارغة على سبيل المثال شيئا ما قد يدويا تعيين متغير من نوع null
ونظرة على هذا:
<script>
function f(a){
alert(typeof(a));
if (a==null) alert('null');
a?alert(true):alert(false);
}
</script>
//return:
<button onclick="f()">nothing</button> //undefined null false
<button onclick="f(null)">null</button> //object null false
<button onclick="f('')">empty</button> //string false
<button onclick="f(0)">zero</button> //number false
<button onclick="f(1)">int</button> //number true
<button onclick="f('x')">str</button> //string true
ومن "مبادئ جافا سكريبت الشيئية" نيكولاس C. Zakas
<اقتباس فقرة>ولكن لماذا كائن عندما يكون نوع باطل؟ (في الواقع، هذا وقد اعترف أنه خطأ من قبل TC39، اللجنة التي تقوم بتصميم ويحافظ جافا سكريبت. هل يمكن السبب أن لاغية هو مؤشر كائن فارغ، مما يجعل "وجوه" قيمة إرجاع منطقية، ولكن هذا لا يزال مربكا.)
اقتباس فقرة>وZakas، نيكولاس C. (2014/02/07). مبادئ جافا سكريبت الشيئية (المواقع أوقد 226-227). لا النشا برس. اصدار حصري.
وقال:
var game = null; //typeof(game) is "object"
game.score = 100;//null is not an object, what the heck!?
game instanceof Object; //false, so it's not an instance but it's type is object
//let's make this primitive variable an object;
game = {};
typeof(game);//it is an object
game instanceof Object; //true, yay!!!
game.score = 100;
وحالة غير معرفة:
var score; //at this point 'score' is undefined
typeof(score); //'undefined'
var score.player = "felix"; //'undefined' is not an object
score instanceof Object; //false, oh I already knew that.
أفضل طريقة للتفكير 'null' هو أن نذكر كيف مماثلة مفهوم يستخدم في قواعد البيانات ، حيث يشير إلى أن الحقل يحتوي على "لا قيمة له على الإطلاق."
- نعم هذا البند قيمة معروفة ؛ ذلك هو 'تعريف.' ذلك وقد تم تهيئة.
- العنصر القيمة: "ليس هناك أي قيمة".
هذه تقنية مفيدة جدا لكتابة البرامج التي هي أكثر بسهولة تصحيحه.وهو 'undefined' متغير قد يكون نتيجة خلل ... (كيف لك أن تعرف؟) ...ولكن إذا كان المتغير يحتوي على قيمة null,' هل تعلم أن "شخص ما في مكان ما في هذا البرنامج ، تعيين إلى null.'" ولذلك أقترح عليك أن, عندما كنت في حاجة للتخلص من قيمة متغير لا "حذف" ...تعيين إلى null.' القيمة القديمة سوف تكون اليتامى و قريبا سيتم القمامة التي تم جمعها ؛ القيمة الجديدة "لا يوجد قيمة (الآن)." في كلتا الحالتين المتغير دولة معينة:"من الواضح أنه ، عمدا ، حصل بهذه الطريقة".
- غير معرف يعني متغير قد أعلن ولكن لم يتم تعيين أية قيمة في حين فارغة يمكن تعيين إلى متغير يمثل "لا قيمة له".(باطل هو عامل التعيين)
2.غير معروف هو نوع نفسها حين باطل هو كائن.
3.جافا سكريبت يمكن نفسها تهيئة أي غير المعينة متغير غير معرف ولكن لا يمكن تعيين قيمة متغير إلى null.هذا الذي ينبغي القيام به برمجيا.