getify / You-Dont-Know-JS

A book series on JavaScript. @YDKJS on twitter.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Value Type - Primitive

VovaSv opened this issue · comments

https://github.com/getify/You-Dont-Know-JS/blame/85b2e6c5fa03b95d044015d6e44b72b8beb6a53b/types-grammar/ch1.md#L16

Maybe it is already raised but...

We are using here term like "value-types" to describe the primitive value and not primitive type (which according to ECMAScript primitive type not exist) in JS?

"The ECMAScript language types are Undefined, Null, Boolean, String, Symbol, Number, BigInt, and Object. " - which actually means no records for primitive type in JS only reference for primitive values?
https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values

every language type that is not an object type is de facto a primitive type.

I don't think that word "de facto" is suitable do describe the primitive type term .
I don't think that who write ECMA standards don't use primitive type term in their documents because this is a "de facto".
I pretty sure that primitive type it's not a formal term defined in the ECMAScript specification itself and just a simplification often used informally to describe these and ECMAScript specification uses the term "types" to describe the fundamental data classifications in JavaScript.

What do you think?

4.4.5 primitive value
member of one of the types Undefined, Null, Boolean, Number, BigInt, Symbol, or String as defined in clause 6

6.1 ECMAScript Language Types
An ECMAScript language type corresponds to values that are directly manipulated by an ECMAScript programmer using the ECMAScript language. The ECMAScript language types are Undefined, Null, Boolean, String, Symbol, Number, BigInt, and Object. An ECMAScript language value is a value that is characterized by an ECMAScript language type.

I cannot see how "primitive value" does not automatically and clearly imply "primitive type"?

If primitive values exist (they do), they have value types (they do), then those value types collectively are referencable as "primitive types". Otherwise known as "types of the primitive values", if you can't call those "primitive types" I think it's useless pedantry.

This seems obvious and incontrovertible to me.

In any case, there is zero chance I will change from how I label them, even if you clearly disagree, so I'm not sure how much more we have to discuss here.

When you are talking about primitive type you refer to type of value not to type of variable right?

of course... that's why I use the phrase "value type" a bunch. JS variables don't have types.

Another question not related to this topic.
Do we have a topic in You-Dont-Know-JS that explain what JS is not?

I mean like a lot of people think that V8 is JS, EventLoop is JS, Callback Queue is JS, Call Stack is JS, Heap is JS, Timers is JS and so on, when basically all these parts are part of the broader JavaScript runtime, components that work together to execute and manage JavaScript code.

At least some of those differences are covered here I believe: https://github.com/getify/You-Dont-Know-JS/blob/2nd-ed/get-started/ch1.md