Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #27826
| 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> |
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
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