15 26 47 54 81 100
node
で対話実行しながら学ぶ。
話題があまりに細かい内容なので実際動かして学べない。またいつか戻ってこよう…。
primitiveは値で比較し、オブジェクトは参照で比較する。
var obj0 = {}; var obj1 = {}; obj0 === obj1 # => false obj0 === obj0 # => true
var prim1 = 123; var prim2 = 123; prim1 === prim2 # => true
また、
obj = {} obj.str = "a" obj.str # => "a"
str.foo = "a" str.foo # => "undefined"
typeof
: 型を判別する。typeof null # ⇒ object #これはバグらしい
var jane = { name: 'Jane', describe: function() { return 'Person named '+this.name; } }; jane.description() # => Person named Jane func = jane.description func() # => Cannot read property 'name' of undefined
そういうときbind
を使う。
var jane = {
name: 'Jane', friends: [ 'Tarzan', 'Cheeta' ], logHiToFriends: function() { 'use strict'; this.friends.forEach(function (friend){ console.log(this.name+' says hi to '+friend); }); }
}
JavaScriptには明るい未来が待っていますと。
言語の特徴、影響を受けた言語など。Wikipediaの内容みたい。
いろいろあってスーパーエンジニアがプロトタイプを10日で作った。 名前もいろいろあって変わりまくって結局JavaScriptという紛らわしい名前に。
ECMAScript
歴史上はじめてのAjaxなアプリはGoogle Map。そこから派生した。
まあ、いろいろあるんですね…。
strictモードの動きとかもある。
型とか。
細かい!nullの歴史とか飛ばす。
適当に読んだら最後らへん意味不明。 ??
> var n = { valueOf: function () { return 123} }; > Number(n) 123 > String(n) '[object Object]'
??
> var s = { toString: function () { return '7'; } }; > String(s) '7' > Number(s) 7
ほとんどのオペレータはprimitive value でしか働かない。 + とかそうだな。
複合オペレータ。+=とか。
== の挙動。変換されてから比較される。 たとえば
> '' == false // 0 === 0 true > '' == true // 1 === 1 true