מההה זההה ????
-
@mat
פשוט כל אחד כזה. !+[] מחזיר true.כי?
כי הסימן + (כשהוא לא בין שתי אופרנדים אלא יש רק אופרנד אחריו) משמש כממיר למספר (זהה לפונקציה Number). ההתנהגות של ההמרה היא שאם זה מחרוזת ריקה או אובייקט זה מחזיר אפס. ראה דוקומנטציה בMDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus
אז +[] שווה 0.
והסימן ! הופך תוצאה בוליאנית. כיון שאפס זה שלילי אז זה מחזיר חיובי.פורסם במקור בפורום CODE613 ב17/08/2015 14:36 (+03:00)
-
מעניין הדבר הזה.
למדתי משהו שלא ידעתי על JS.
true + true == 2
פשוט כל אחד כזה. !+[] מחזיר true.!!!!!!!!!!!!!!!!!!!!!!!!!!!!![] == false !!!!!!!!!!!!!!!!!!!!!!!!!!!!!![] == true
קיים רק בשביל שנראה שהשפה הזו גאונית? :ugeek:
פורסם במקור בפורום CODE613 ב18/08/2015 04:38 (+03:00)
-
@דוד ל.ט.
@אהרן
@mat
פשוט כל אחד כזה. !+[] מחזיר true.כי?
כי הסימן + (כשהוא לא בין שתי אופרנדים אלא יש רק אופרנד אחריו) משמש כממיר למספר (זהה לפונקציה Number). ההתנהגות של ההמרה היא שאם זה מחרוזת ריקה או אובייקט זה מחזיר אפס. ראה דוקומנטציה בMDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus
אז +[] שווה 0.
והסימן ! הופך תוצאה בוליאנית. כיון שאפס זה שלילי אז זה מחזיר חיובי.תודה רבה רבה!
הבנתי הרבה מהקוד, קבלתי הרבה תובנות והבנתי דברים נוספים.פורסם במקור בפורום CODE613 ב18/08/2015 04:40 (+03:00)
-
פה הסידרה שהבחור יצר ובדק את הקוד הזה
למשל הבא בתור (קדמו את המספר בurl)
http://jsfiddle.net/b38L4p9q/3/
מראה את הקוד הנ"ל בתחביר רגילfunction primeAlert(n) { 'use strict'; var arr = [], m, p; for (m = 2; m <= n; m++) { p = 1; while (m % ++p); if (m === p) arr.push(m); } arr.forEach(alert); return 42; }
פורסם במקור בפורום CODE613 ב18/08/2015 04:50 (+03:00)
-
עדיין לא הבנתי כמה דברים
for(ll=!+[]+!![];ll<_+(+!![]);ll++) { lll=+!![];
היתה הצהרה רק על משתנה L מאיפה צמח LL ו-LLL??
forEach(alert);
מאיפה הוא יודע על איזה מערך לבצע forEach??
א. עצם זה שאתה מקצה לזה ערך זה כמו הכרזה על משתנה
זה מאוד מסוכן ובשביל למנוע את זה יש את strict mode
ב. את זה עושה ה withפורסם במקור בפורום CODE613 ב18/08/2015 10:21 (+03:00)
-
א. <use strict>? אתה מכניס א"ז בקביעות לסקריפטים שלך?
כן.
@אהרןב. מה??
תחשוב על with כמו import שעושים ב C# למרחב שמות לדוגמה אם תרשום ב JS ככה:
var r = 10; with (Math) { x = r * cos(PI); }
זה זהה ל:
var r = 10; var x = r * Math.cos(Math.PI); console.log(x);
זה פשוט חוסך את ההקלדה של מרחב השמות / המשתנה שעליו בוצע ה with, וכך גם במקרה שלנו ב forEach, בגלל שהוא בתוך בלוק של with על המערך לא צריך לרשום את שם המערך.
אגב זו תכונה מאוד בעייתית איך שמימשו אותה ב JS, ב VB לדוגמה אתה לא צריך להקליד את שם המשתנה אבל צריך להקליד נקודה במקום,
במימוש הזה זה יכול לגרום לבלבול, לדוגמה כאן הוא ידפיס את x מתוך o, שזה לא קריא בכלל:function test(o,x) { with(o) {alert(x);}} var o = {x:'test1'}; test(o,'test2');
ואם אין x ב o אז הוא כן ידפיס את הפרמטר x:
function test(o,x) { with(o) {alert(x);}} var o = {u:'test1'}; test(o,'test2');
לעיון נוסף
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/withפורסם במקור בפורום CODE613 ב18/08/2015 11:49 (+03:00)