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


Groups > comp.lang.javascript > #23063 > unrolled thread

Re: Trying to view the properties of an object

Started byThomas 'PointedEars' Lahn <PointedEars@web.de>
First post2014-02-11 13:39 +0100
Last post2014-02-11 13:39 +0100
Articles 1 — 1 participant

Back to article view | Back to comp.lang.javascript

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: Trying to view the properties of an object Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-02-11 13:39 +0100

#23063 — Re: Trying to view the properties of an object

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2014-02-11 13:39 +0100
SubjectRe: Trying to view the properties of an object
Message-ID<1991992.lvnxbIPBPy@PointedEars.de>
Stefan Ram wrote:

                                                           [Citation needed]
>   I am trying to view the properties of a prototype. They say
>   in JavaScript everything is an object.

Dump “them”, then.  You should know better than to rely blindly on such 
unfounded statements. 

ECMAScript implementations like JavaScript do have primitive data types [1].

>   Therefore, I assume that a prototype is an object too.

Ex falso quodlibet; however, a (working) prototype must be an object, or 
null, for other reasons [2].

>   I started with typing this into the Firefox Web console:
> 
> 0  . __proto__ . __proto__

__proto__ is a proprietary property.  The standards-compliant way to 
determine the prototype of an object is Object.getPrototypeOf(o). [3]  Which 
would have shown you that there are primitive data types, and that the 
statement “in JavaScript everything is an object” is provably false:

| >> Object.getPrototypeOf(0)
| TypeError: 0 is not an object
 
>   . It gave me:
> 
> [object Object]
> 
>   . I assumed that this was an object (»everything is an
>   object«), and so I wanted to list all its properties,
>   but the following loop did not produce any output:
> 
> for( var i in 0 . __proto__ . __proto__ )console.log( i );

Not all properties are enumerable (have the [[Enumerable]] attribute set per 
ES 5.x, or do not have the [[DontEnum]] attribute set per ES 1 through 3 
Final). [6][7][8]

A for-in statement iterates only over the enumerable properties of an object 
*and* over the enumerable properties it inherits from its prototype, in 
arbitrary order. [9]
 
>   . The next attempt, to my surprise, printed the numbers
>   from 0 to 13:

You want to reconsider your learning technique as well.

> for( var i in Object.getOwnPropertyNames( 0 . __proto__ . __proto__ ))
> console.log( i );
> 
> 0
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 10
> 11
> 12
> 13

Object.getOwnPropertyNames() returns a reference to an Array instance 
representing an array of primitive string values, whereas each string value 
is the name of a property that the object does not inherit from its 
prototype. [10]

The names of the own *enumerable* properties of an Array instance include 
the array indexes. [11]  (However, because implementations may differ and 
order is not guaranteed with for-in, you SHOULD NOT iterate over an Array in 
*this* way.)
 
>   . What I actually wanted to see was a list of all the
>   well-known object prototype properties (functions) such as
> 
> hasOwnProperty
> isPrototypeOf
> propertyIsEnumerable
> toLocaleString
> toSource
> toString
> unwatch
> valueOf
> watch
> 
>   .

Skip for-in, then.

BTW, your peculiar posting style is _not_ appreciated. [12]

__________
[1] <http://ecma-international.org/ecma-262/5.1/#sec-8>
[2] <http://ecma-international.org/ecma-262/5.1/#sec-8.6.2>
[3] <http://ecma-international.org/ecma-262/5.1/#sec-15.2.3.2>
[6] <http://ecma-international.org/ecma-262/5.1/#sec-8.6.1>
[7] <http://ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,
%203rd%20edition,%20December%201999.pdf>
[8] Ecma Interntional (2000). ECMAScript Language Specification. Edition 3 
    Final.  <http://www.mozilla.org/js/language/E262-3.pdf> (retrieved
    2002-07-22).
[9] <http://ecma-international.org/ecma-262/5.1/#sec-12.6.4>
[10] <http://ecma-international.org/ecma-262/5.1/#sec-15.2.3.4>
[11] <http://ecma-international.org/ecma-262/5.1/#sec-8.12.5>
[12] <http://PointedEars.de/faq#posting>

-- 
PointedEars

Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.

[toc] | [standalone]


Back to top | Article view | comp.lang.javascript


csiph-web