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


Groups > comp.lang.javascript > #27826

Re: Identity of values in Javascript

From Ben Bacarisse <ben.usenet@bsb.me.uk>
Newsgroups comp.lang.javascript
Subject Re: Identity of values in Javascript
Date 2015-05-22 19:17 +0100
Organization A noiseless patient Spider
Message-ID <87r3q8h3yf.fsf@bsb.me.uk> (permalink)
References <555f256b$0$12988$c3e8da3$5496439d@news.astraweb.com>

Show all headers | View raw


Steven D'Aprano <steve@pearwood.info> writes:

> Hi, I'm a newbie when it comes to Javascript, and I'm trying to understand
> some aspects of the language model. Please correct me if I'm wrong.
>
> Javascript has two kinds of values, simple values or primitives, and
> objects. There are three primitive types: number, string and boolean.
> Primitives are implemented as simple machine types. Everything else is an
> object.

The ECMAScript types are named with capitals, and there are a couple
more (Null and Undefined) but that's neither here nor there as far as
your point goes.  Also I'm not sure I'd say that String is implemented
as a simple machine type -- it's a relatively complex type compared to,
say, Number, -- but, again, that's not your point.

> var a = 23;  // a primitive
> var b = {};  // an object
> var c = [1, 2]  // arrays are objects too
>
> I understand that for primitives, if I pass a value to a function,
> Javascript uses pass by value: the value is copied. (This is the same
> behaviour as, say, C or Pascal.) While accepting that on faith is fine, I'd
> like to actually demonstrate it with some Javascript code.
>
> In C or Pascal, I could use the "address of" operator to compare the value
> inside the function with the value outside the function, to see if they
> referred to the same memory location.

In C and in Pascal values don't have addresses so you can't tell if a
value is copied by taking the address of anything.

In C, you can be certain that the object (using the C term) named by the
parameter has a unique address distinct from that of all of the objects
during its lifetime, but that's it.  You know you get a copied value
because of the way the semantics of function calling is defined.

Informally, I'd describe ECMAScript argument passing as call by sharing
(as in Python) because that's how it behaves.  The full specification is
in ECMA 262 edition 5.1 (there's a new version, 6, on the way).  People
more expert than I will step in to say where (if anywhere) the corner
cases are that make this informal description untrue.

> In Javascript, I could use something
> like this:
>
>
> function test(arg) {
>     if (addr(arg) != addr(x)) {
>         return "copied"
>     }
>     else {
>         return "not copied"
>     }
> }
>
> x = 23;

This is a little odd in ECMAScript.  Put a 'var' in front to make a new
named variable.  Otherwise you are adding (or modifying) the 'x'
property to the global object.

> print(test(x));  // I'm using the rhino shell.

<snip>
-- 
Ben.

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


Thread

Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-22 22:47 +1000
  Re: Identity of values in Javascript Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-05-22 19:17 +0100
    Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-23 05:02 +1000
      Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-23 05:25 +1000
      Re: Identity of values in Javascript "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2015-05-22 23:51 +0200
      Re: Identity of values in Javascript Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-05-23 00:24 +0100
        Re: Identity of values in Javascript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-05-23 09:35 +0200
          Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-23 23:04 +1000
        Re: Identity of values in Javascript "Christoph M. Becker" <cmbecker69@arcor.de> - 2015-05-23 22:27 +0200
          Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-25 01:58 +1000
        Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-25 02:12 +1000
          Re: Identity of values in Javascript Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-05-24 23:33 +0100
            Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-25 21:47 +1000
              Re: Identity of values in Javascript Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-05-26 00:10 +0100
                Re: Identity of values in Javascript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-05-26 17:34 +0200
                Re: Identity of values in Javascript Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-05-26 17:03 +0100
                Re: Identity of values in Javascript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-05-26 18:31 +0200
                Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-27 23:40 +1000
                Re: Identity of values in Javascript Joao Rodrigues <groups_jr-1@yahoo.com.br> - 2015-05-27 23:21 -0300
                Re: Identity of values in Javascript "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2015-05-27 19:32 -0700
                Re: Identity of values in Javascript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-05-28 22:38 +0200
                Re: Identity of values in Javascript Scott Sauyet <scott.sauyet@gmail.com> - 2015-05-26 09:06 -0700
                Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-27 23:02 +1000
    Re: Identity of values in Javascript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-05-23 00:02 +0200
    Re: Identity of values in Javascript Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-05-23 09:19 +0200
  Re: Identity of values in Javascript Steven D'Aprano <steve@pearwood.info> - 2015-05-23 05:20 +1000

csiph-web