+ 9

Why doesn't it output error...WEIRD😫 and one more down the order

Q1 : var name; console.log (name); // blank screen in console Q2 : var name=5; // I deliberately gave it 5....I think we can // typed in the console directly. typeof (name); //string WHATTTTT😨 David Carroll Luis Febro 🇧🇷 Igor Makarsky daneillonge AgentSmith Anna https://code.sololearn.com/WcLda6gMFziR/?ref=app https://code.sololearn.com/WXDvTV8ebw11/?ref=app

7th Jul 2019, 9:42 AM
John Dhinakar
John Dhinakar - avatar
20 odpowiedzi
+ 21
---------- RE: Question 2 ------ In order to understand what's going on here, let's first establish some context about the following code: // <--- var name=5; console.log(typeof(name)); // ---> 1. The variable `name` refers to a property on the browser's window object: `window.name` 2. Which is proven with the lines below: // <--- var name; name = 5; console.log( name === window.name && name === window["name"] ) // Outputs: true // ---> This is due to the following reasons: a.) All global variables belong to the `window` object. b.) Variable declarations using `var` in JavaScript are automatically hoisted to the top of the current scope. 3. The `window.name` property most likely uses a setter method to assign the string value based on the `.toString()` method of the assigned value. - See MDN: https://developer.mozilla.org/en-US/docs/Web/API/Window/name#Notes 4. This would be similar to the following sample code: // <--- var win = { _name: "", set name (value) { this._name = value.toString(); }, get name () {return this._name;} } win.name = 5; console.log(typeof(win.name)); //Outputs "string" // ---> This mimics the same behavior as seen with `name` - a.k.a. `window.name`. ---------- RE: Question 1 ------ // <--- var name; console.log(name); document.write(name); // --> The explanation for Question 2 establishes that `name` in this context is also `window.name`, which is an "empty string" value. For this reason, `undefined` would NOT be the output for this code snippet.
8th Jul 2019, 6:06 AM
David Carroll
David Carroll - avatar
+ 14
Morpheus I agree 💯 percent. To be honest... This question was one that almost stumped me for a few minutes until I found that vague reference in MDN. And... of course... we don't use `var` on our team. 😉👌
8th Jul 2019, 11:47 AM
David Carroll
David Carroll - avatar
+ 12
Very interesting observation Dhinakar Reddy Challa. Thank you for the explanation David Carroll, it makes sense now. At Mozilla there was only a short mention:- "window.name will convert all values to their string representations by using the toString method." But ur answer explains the overall process. I ll just extend ur point a. All global variables belong to window object is applicable on 2 cases. 1. When declared using var. 2. When undeclared But global variables declared using let and const do not become a window property. this code explores those 4 cases mentioned above. https://code.sololearn.com/WwhKQUoMbXHH/?ref=app
8th Jul 2019, 11:04 AM
Morpheus
Morpheus - avatar
+ 9
Morpheus LOL... Yep... I was going to mention this in my original answer, but it was turning into a book already. 😂🤣 Specifically, you will see that changing `var` to `let` in both codes in the original question, the outputs for `name` are "number" and "undefined" respectively. 😉👌
8th Jul 2019, 11:29 AM
David Carroll
David Carroll - avatar
+ 9
David Carroll 😄 gotcha , I have grown scared of var. The unintended side-effects of var are so many.😵 These days I feel it's better to write code in ES6, if support for old browser is needed then we can use babel to generate old js code.
8th Jul 2019, 11:39 AM
Morpheus
Morpheus - avatar
+ 9
David Carroll yess! 💪😎
8th Jul 2019, 11:56 AM
Morpheus
Morpheus - avatar
+ 8
Dhinakar Reddy Challa After writing that very long answer, I wonder if the following summary version would have been just as clear, or better: TL;DR ---------- name is window.name which is always assigned the value of the toString() method. This is why name = 5 is still a string and why console.log(name) doesn't output undefined. ------ Sadly... this summary version wasn't clear to me until after posting that much longer explanation. 🤦‍♂️🤣😂
8th Jul 2019, 7:10 AM
David Carroll
David Carroll - avatar
+ 7
David Carroll as always the man himself comes with a perfect answer..thank you David 🙏
8th Jul 2019, 6:15 AM
John Dhinakar
John Dhinakar - avatar
+ 6
'name' is not a reserved word in JavaScript but it is a DOM property so that could be the reason for the output.
7th Jul 2019, 10:23 AM
Jonathan Pizarra (JS Challenger)
Jonathan Pizarra (JS Challenger) - avatar
+ 6
David Carroll Morpheus Luis Febro 🇧🇷 the way the answer was build up for this question was just amazing man....we got to know more deep...thank you each one of you for answering me😊🙏
8th Jul 2019, 11:45 AM
John Dhinakar
John Dhinakar - avatar
+ 5
Dhinakar Reddy Challa I tested in the console. Everything I said is based on what the console outputted and what primitive types are. Hold on for another person's standpoint if I am wrong then. I believe your "console" is leading you astray. P.S You do not need to downvote my answer. I did with such zeal. Furthermore, It is not my fault the facts being facts. (=
7th Jul 2019, 11:25 AM
Luis Febro 🇧🇷
Luis Febro 🇧🇷 - avatar
+ 5
Morpheus tq for ur response man...u added a bit more sense to the answer🙏
8th Jul 2019, 11:08 AM
John Dhinakar
John Dhinakar - avatar
+ 4
David Carroll yea man...when I tried to console.log(window) it got a list words like a dictionary and I found name like this.....name:" "...which it is attached to global object window and is by default a string..as per your explanation 😊 thanks man
8th Jul 2019, 7:41 AM
John Dhinakar
John Dhinakar - avatar
+ 3
name is the property of window object <body> <script> var mWindow=window.open("","da_wae","width=200,height=100"); mWindow.document.write("This window name is "+mWindow.name); </script> </body>
7th Jul 2019, 10:45 AM
Yanothai Chaitawat
Yanothai Chaitawat - avatar
+ 3
Luis Febro 🇧🇷 I placed the codes please check it buddy
7th Jul 2019, 11:31 AM
John Dhinakar
John Dhinakar - avatar
+ 2
Q1: outputs "undefined" in the console, blank screen only in the browser obviously. Q2: No, here both syntax and output are incorrect. You need an output caller like console.log, DOM or alert. var name = "5"; console.log(typeof(name)); This code above outputs "string" because the number is between quotation marks, thus a string. Otherwise -- in its raw form (5) -- the output would be a number.
7th Jul 2019, 10:54 AM
Luis Febro 🇧🇷
Luis Febro 🇧🇷 - avatar
+ 2
Luis Febro 🇧🇷 the 1st question outputs blank in console ...undefined is not printed in the console... The 2nd question I typed directly in the console to check the result it outputs string even in the editor I type it outputs string...I want to give 5 to the variable name. I request you to please review my doubt again brother
7th Jul 2019, 11:18 AM
John Dhinakar
John Dhinakar - avatar
+ 2
🤯
8th Jul 2019, 3:20 PM
Chris Coder
Chris Coder - avatar
+ 2
name is a window property thats why it didnt show anything change to other variable name it will log or write undefined var a,b,c,d or whatever;
9th Jul 2019, 4:03 AM
Danielov
Danielov - avatar
+ 2
var nam=5; console.log(typeof(nam)); it will give number name is window property that stored string values thats why it gives string type.
9th Jul 2019, 4:06 AM
Danielov
Danielov - avatar