Chapter 1b: JavaScript as a Computer Language

1. Basics

1.1 Primitive Types

Boolean, Number, String, null, undefinedSymbol是primitive types,也就是基本类型。用===!==时,比较的是他们的value。注意,永远不要用==!=来比较变量。

JavaScript的Number不区分整数和小数,比如5/2的结果是2.5String的literal可以用单引号或者双引号,但一般惯用单引号

变量没有被赋值时,JavaScript会认为它的值为undefined。当engineer想给variable赋一个代表空的值时,用null.

1.2 Variables

valid变量名必须以alphabet letter, _或者$开头。开头以外的字符可以用大多数字符,但不包括-

// Variables can be declared without an initial value
var foo;
var bar = 42;

相比于var, const代表这个变量的value不会改变。如果这个变量初始值是个object,也就是说这个变量永远reference同一个object。

1.3 String

var firstName = 'James';
var lastName = 'Yu';

// 用斜引号代表变量填空的string literal
`My name is ${firstName} ${lastName}.`      // "My name is James Yu"
'My name is ${firstName} ${lastName}.'      // "My name is ${firstName} ${lastName}."

1.4 Function

1.4.1 function declaration

1.4.2 function expression

1.4.3 Arrow functions

通常都使用于一次性使用的情况,比如作为某个函数的参数,赋值给某个object的property等。 Brackets are optional when there's only one parameter / statement.

1.5 Control structures

1.5.1 if...else

1.5.2 Loops

Generic, not specific to objects

Specific to objects

Specifc to collections

2. Object

除了primitive types以外,其他的data都是object,所有的JavaScript function实际上也属于Function这个类别的object。而所有的object,都属于JavaScript当中的Object这个大类

Object可以被认为是一些property的组合,property可以解释为"a variable attached to the object", 除了附属于object以外,property与一般的变量没有什么不同,比如每个property都由property name和property value组成。property value可以是任意类型,自然也可以是Function object。

2.1 Object comparison

对Object用===时,比较的是object的reference而不是object里的properties。(可以认为"objects are always represented as references", 所有object变量,存的都只是reference to the object)。所以一般不会用===去比较objects。

2.2 Properties

如果property name是valid变量名或者number,那么就可以省略引号。

通常情况下property可以用objectName.propertyName来访问。如果property name不是一个valid变量名,或者是动态的,比如来自于一个string变量,那么就必须用[]. 注意和ruby的hash一样,JavaScript不能从property value来得到property name.

3. Collections

3.1 Methods

3.2 Iteration methods

arr.forEach take function作为参数,但不使用function的结果。就像在ruby中arr.each会take block作为参数,但并不使用block的结果。

其他Iteration method和Ruby中的对应函数相似,会使用function的结果

4. Prototypes

5. Scope*

Last updated