لماذا يعتبر كائن و ما هو الفرق بين باطل و غير معروف?

StackOverflow https://stackoverflow.com/questions/801032

سؤال

لماذا 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
    }
  • RegEx.exec.

  • وظائف جديدة التي هي في حالة تغير مستمر.التالية بإرجاع 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.' القيمة القديمة سوف تكون اليتامى و قريبا سيتم القمامة التي تم جمعها ؛ القيمة الجديدة "لا يوجد قيمة (الآن)." في كلتا الحالتين المتغير دولة معينة:"من الواضح أنه ، عمدا ، حصل بهذه الطريقة".

  1. غير معرف يعني متغير قد أعلن ولكن لم يتم تعيين أية قيمة في حين فارغة يمكن تعيين إلى متغير يمثل "لا قيمة له".(باطل هو عامل التعيين)

2.غير معروف هو نوع نفسها حين باطل هو كائن.

3.جافا سكريبت يمكن نفسها تهيئة أي غير المعينة متغير غير معرف ولكن لا يمكن تعيين قيمة متغير إلى null.هذا الذي ينبغي القيام به برمجيا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top