Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #33725

Re: why the ! operator can be used to determine a string is null?

From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Newsgroups comp.lang.javascript
Subject Re: why the ! operator can be used to determine a string is null?
Date 2017-08-09 11:32 +0200
Organization PointedEars Software (PES)
Message-ID <11859138.uLZWGnKmhe@PointedEars.de> (permalink)
References <omcm6a$rga$1@gioia.aioe.org> <1939054.irdbgypaU6@PointedEars.de> <e3a5d53f-250f-41b9-83a4-792d3c042966@googlegroups.com> <omedf0$3i$1@csiph.com>

Show all headers | View raw


Cezary Tomczyk wrote:

> On 09/08/2017 06:20, Julio Di Egidio wrote:
>> On Tuesday, August 8, 2017 at 11:20:26 PM UTC+2, Thomas 'PointedEars'
>> Lahn wrote:
>>> Second, the function call `prompt()` is actually the method call
>>> `window.prompt()` and should always be written so.
>> Nah, that's just a bit of your misplaced dogmatism.
> 
> That's not dogmatism, but a practical and good advice to use full
> reference to a method. Time ago I wrote article about that:
> 
> http://www.ctomczyk.pl/js-tip-always-use-full-reference/282/

Your solution to the problem looks suboptimal to me, though.  First you say

| // "global" represent "window" object in browsers

which, AISB, for

  (function (global) {
    /* … */
  }(this));

is questionable.  The ECMAScript 2016 Language Specification, clarifying 
previous Editions, only says in that regard:

,-<http://www.ecma-international.org/ecma-262/7.0/>
| 
| […]
| 
| 4.1 Web Scripting
| 
| A web browser provides an ECMAScript host environment for client-side 
| computation including, for instance, objects that represent windows, 
| menus, pop-ups, dialog boxes, text areas, anchors, frames, history, 
| cookies, and input/output. Further, the host environment provides a means 
| to attach scripting code to events such as change of focus, page and image 
| loading, unloading, error and abort, selection, form submission, and mouse 
| actions. Scripting code appears within the HTML and the displayed page is 
| a combination of user interface elements and fixed and computed text and 
| images. The scripting code is reactive to user interaction and there is no 
| need for a main program.
| 
| A web server provides a different host environment for server-side 
| computation including objects representing requests, clients, and files; 
| and mechanisms to lock and share data. By using browser-side and server-
| side scripting together, it is possible to distribute computation between 
| the client and server while providing a customized user interface for a 
| Web-based application.
| 
| Each Web browser and server that supports ECMAScript supplies its own host 
| environment, completing the ECMAScript execution environment.

and

| 18 The Global Object
| 
| […]
| In addition to the properties defined in this specification the global 
| object may have additional host defined properties. This may include a 
| property whose value is the global object itself; for example, in the HTML 
                                                    ^^^^^^^^^^^
| document object model the `window` property of the global object is the 
| global object itself.

The caveat here is that the first quoted section, being part of section
“4 Overview”, which is not normative, and examples in general, are *not 
normative*.  *Many people misunderstand this* when referring to technical 
specifications, and ECMAScript in particular.

The *ECMAScript Language* Specification does _not_ specify the features of 
the “HTML document object model”; the _“HTML document object model” 
specification_, whatever that is and applies to a runtime environment, does 
(currently, it would be the HTML 5.1 DOM interfaces, and DOM4, for recent 
versions of Web browsers).

But that aside, if one accepts your premise, then you are using

|         if (typeof global.self.close === 'function') {
|             global.self.close();
|         }

1. (AISB,) close() is a *host* object’s method.  You cannot be certain
   that the result of the `typeof` operation is "function" *everywhere*
   if that method can be called.  Therefore, some of us have devised
   isHostMethod() implementations, like jsx.object.isHostMethod().

2. The method has been supported on window objects since
   the beginning (Netscape Navigator 2.0).  Why feature-test it
   *in the same window* to begin with?

   <http://e-pla.net/documents/manuals/javascript-1.0/ref_a-c.html#close_window_method>

3. Why not simply

     window.close();

   ?

   Or, if that looks too uncertain, why not 

     (function (global, window) {
       // … window …
     }(this, this.window));

or

     (function (global) {
       // … global.window …
     }(this));

   ?

   The more error-prone `global.self` indirection, at any rate, appears to 
   be unnecessary.

As for the formatting of the article, I suggest that you do not let code 
lines to be word-wrapped (for me, there are code lines in your article that 
contain only one character from the previous original line).  Not using 
`word-wrap`, and using `overflow-x: auto` instead, enables that; a small 
`padding-right` value should preserve the aesthetics, considering the 
background color.

Alternatively, you should use `/* … */` for documentation comments (my 
standing code style recommendation; however, in this case, then other code 
lines could still be wrapped in unforeseen ways).

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

why the ! operator can be used to determine a string is null? Xue Feng <xf.lotus@yahoo.com> - 2017-08-08 23:43 +0800
  Re: why the ! operator can be used to determine a string is null? Robert Heller <heller@deepsoft.com> - 2017-08-08 11:16 -0500
  Re: why the ! operator can be used to determine a string is null? Jon Ribbens <jon+usenet@unequivocal.eu> - 2017-08-08 17:40 +0000
    Re: why the ! operator can be used to determine a string is null? Julio Di Egidio <julio@diegidio.name> - 2017-08-08 21:38 -0700
      Re: why the ! operator can be used to determine a string is null? John G Harris <niam@jghnorth.org.uk.invalid> - 2017-08-09 14:51 +0100
    Re: why the ! operator can be used to determine a string is null? Jon Ribbens <jon+usenet@unequivocal.eu> - 2017-08-09 11:01 +0000
      Re: why the ! operator can be used to determine a string is null? "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2017-08-09 16:17 +0200
        Re: why the ! operator can be used to determine a string is null? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-08-09 16:14 +0100
          Re: why the ! operator can be used to determine a string is null? Julio Di Egidio <julio@diegidio.name> - 2017-08-09 10:25 -0700
            Re: why the ! operator can be used to determine a string is null? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-08-09 21:04 +0100
              Re: why the ! operator can be used to determine a string is null? Julio Di Egidio <julio@diegidio.name> - 2017-08-09 13:11 -0700
                Re: why the ! operator can be used to determine a string is null? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-08-10 00:59 +0100
                [ANN] Spam filter for Google Groups (was: why the ! operator can be used to determine a string is null?) Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-10 05:06 +0200
                Re: [ANN] Spam filter for Google Groups (was: why the ! operator can be used to determine a string is null?) Julio Di Egidio <julio@diegidio.name> - 2017-08-10 01:00 -0700
                Re: [ANN] Spam filter for Google Groups (was: why the ! operator can be used to determine a string is null?) John G Harris <niam@jghnorth.org.uk.invalid> - 2017-08-10 09:40 +0100
                Re: why the ! operator can be used to determine a string is null? Julio Di Egidio <julio@diegidio.name> - 2017-08-10 00:56 -0700
          Re: why the ! operator can be used to determine a string is null? "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2017-08-09 22:01 +0200
            Re: why the ! operator can be used to determine a string is null? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-08-09 23:35 +0100
              Re: why the ! operator can be used to determine a string is null? "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2017-08-10 10:05 +0200
                Re: why the ! operator can be used to determine a string is null? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-08-10 15:08 +0100
                Re: why the ! operator can be used to determine a string is null? "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2017-08-10 16:42 +0200
          Re: why the ! operator can be used to determine a string is null? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-09 23:56 +0200
            Re: why the ! operator can be used to determine a string is null? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-08-10 01:40 +0100
              Re: why the ! operator can be used to determine a string is null? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-10 03:44 +0200
                Re: why the ! operator can be used to determine a string is null? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-08-10 03:20 +0100
                Re: why the ! operator can be used to determine a string is null? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-10 04:33 +0200
                Re: why the ! operator can be used to determine a string is null? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-08-10 03:57 +0100
  Re: why the ! operator can be used to determine a string is null? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-08 23:20 +0200
    Re: why the ! operator can be used to determine a string is null? Julio Di Egidio <julio@diegidio.name> - 2017-08-08 21:20 -0700
      Re: why the ! operator can be used to determine a string is null? Cezary Tomczyk <cezary.tomczyk@gmail.com> - 2017-08-09 09:26 +0200
        Re: why the ! operator can be used to determine a string is null? Julio Di Egidio <julio@diegidio.name> - 2017-08-09 01:31 -0700
        Re: why the ! operator can be used to determine a string is null? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-09 11:32 +0200
          Re: why the ! operator can be used to determine a string is null? Cezary Tomczyk <cezary.tomczyk@gmail.com> - 2017-08-10 09:10 +0200
            Re: why the ! operator can be used to determine a string is null? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-10 14:51 +0200
              Re: why the ! operator can be used to determine a string is null? Tim Streater <timstreater@greenbee.net> - 2017-08-10 15:11 +0100
              Re: why the ! operator can be used to determine a string is null? Cezary Tomczyk <cezary.tomczyk@gmail.com> - 2017-08-10 18:52 +0200

csiph-web