69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: With | ||
|  | --- | ||
|  | ## With
 | ||
|  | 
 | ||
|  | JavaScript's `with` statement is a shorthand way for editing several properties on one object. Most developers discourage usage of `with`, and you are best not using this keyword. | ||
|  | 
 | ||
|  | **Note**: `"strict mode"` forbids usage of `with`. | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Syntax
 | ||
|  | ```syntax | ||
|  | with (expression) | ||
|  |   statement | ||
|  | ``` | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Example Usage
 | ||
|  | In JavaScript, you can individually modify an object's properties like below: | ||
|  | ```javascript | ||
|  | let earth = {}; | ||
|  | earth.moons = 1; | ||
|  | earth.continents = 7; | ||
|  | ``` | ||
|  | `with` gives you a shorthand to modify the properties on an object: | ||
|  | ```javascript | ||
|  | with (earth) { | ||
|  |   moons = 1; | ||
|  |   continents = 7; | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | While this example is contrived, you can understand use cases of `with` more if you have larger objects like below: | ||
|  | ```javascript | ||
|  | earth.continents.australia.geography.ocean = "Pacific"; | ||
|  | earth.continents.australia.geography.river = "Murray"; | ||
|  | earth.continents.australia.geography.mountain = "Kosciuszko"; | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Alternatives
 | ||
|  | You should not use `with` as it has subtle bugs and compatibility issues. A highly recommended approach is to assign the object to a variable, and then modify the variable's properties. Here is an example using a larger object: | ||
|  | ```javascript | ||
|  | let earth = { | ||
|  |   continents: { | ||
|  |     australia: { | ||
|  |       geography: {} | ||
|  |     } | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | let geo = earth.continents.australia.geography; | ||
|  | 
 | ||
|  | geo.ocean = "Pacific"; | ||
|  | geo.river = "Murray"; | ||
|  | geo.mountain = "Kosciuszko"; | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Try It Out
 | ||
|  | https://repl.it/Mixg/5 | ||
|  | 
 | ||
|  | 
 | ||
|  | #### More Information:
 | ||
|  | 
 | ||
|  | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with" target="_blank">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with</a> | ||
|  | 
 | ||
|  | <a href="https://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/" target="_blank">https://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/</a> | ||
|  | 
 | ||
|  | <a href="http://2ality.com/2011/06/with-statement.html" target="_blank">http://2ality.com/2011/06/with-statement.html</a> |