Path: csiph.com!feeder.erje.net!1.eu.feeder.erje.net!news.albasani.net!weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: comp.lang.javascript Subject: Re: not "autovivification", but ...? Date: Tue, 31 May 2016 17:31:36 +0200 Organization: PointedEars Software (PES) Lines: 39 Message-ID: <1570701.170j4HGxR2@PointedEars.de> References: Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: solani.org 1464708696 14493 eJwNyckBgAAIA7CZuFocBxD2H0HzTRgEQ0fA4+Iyc0wekidV062hPsVzUO+fNWpj88XKin4UyxDe (31 May 2016 15:31:36 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Tue, 31 May 2016 15:31:36 +0000 (UTC) User-Agent: KNode/4.14.2 X-User-ID: eJwNx8kBwDAIA7CVwmFDxykE9h+h1U8wCjucoGOxdmCrt6AI95uznU++p95me7uEVmpOkP/RUiZDY9RMX+QHSKMVbg== Cancel-Lock: sha1:f9Dvb7Tner9lk1hmyA+jVtGPoGA= X-NNTP-Posting-Host: eJwNx8EBgDAIA8CZIATsOIDN/iPo/Y5Iy61IZlDUmumEBmAUrJ7447VzXZc72xo73e+0y4EPIgsR4Q== Xref: csiph.com comp.lang.javascript:30590 Stefan Ram wrote: > […] we do have > > "use strict"; this.b = 1; > > . That is, when »this.b« is a assigned to - even in strict mode - > a new property »b« is implicitly created. No declaration (with > »var«, »let«, or »const«) is required. > > Is there a name for this »feature« of JavaScript? Property write access. It does not only work with the object referred to by “this” – which, you should keep in mind, does not have to be so particularly in strict mode – but with all objects that have the [[Extensible]] flag set. Also, you want to be careful here: assigning to a property of “this” can result in the creation of the equivalent of a global variable when a function in which it is used is not called as a constructor, and it results in a ReferenceError exception thrown in function context in strict mode if the function is neither called as the method of an object nor as a constructor. “Autovivification” (in C#: null propagation) would certainly be useful at times (very often you just want to get “undefined” from x.y.z when x.y yields “undefined” instead of typeof-testing the whole shebang, and x.y.z = 1 when x.y is “undefined”; consider arrays of objects), and is available in CoffeeScript as the “accessor variant of the existential operator“: x?.y.z -- PointedEars FAQ: | SVN: Twitter: @PointedEars2 | ES Matrix: Please do not cc me. / Bitte keine Kopien per E-Mail.