Why doesn't it output error...WEIRDšŸ˜« and one more down the order | Sololearn: Learn to code for FREE!
Novo curso! Todo programador deveria aprender IA generativa!
Experimente uma aula grƔtis
+ 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 Respostas
+ 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