はじめに
最近JavaScriptを勉強し始めたばかりですが、勉強していて個人的に印象的だっとことを復習がてらまとめます。
言語機能的な視点がメインになってる。
完全に入門者ですので間違っていることもあると思いますし、まだまだ知らないこともたくさんあるのでいろいろ教えてください。
普段はC++書いてる人です。
セミコロンがなくてもいいらしい
ある程度はセミコロンがなくても自動的に判断してくれるらしい
var a = 0 //OK
var b = 1; //OK
JS界隈の主流がわかりませんが、自分は怖いからセミコロンをつけておきたいと感じた
undefined
var a;//初期化されていない(未定義値)
console.log(a);//undefined
初期化されていない変数など未定義値にはそれ専用のものが用意されているようだ
###おまけ
同様にInfinity,NaN,nullとかがあるそう
===,!==演算子
初見で何者かと思うやつ
var a = 1;
var b = '1';
console.log(a == b); //true
console.log(a === b); //false
データ型も等しいかチェックしたい時は===や!==を使う
むしろ1 =='1'がtrueな事に驚いた
おまけ
console.log(null == undefined); //true
console.log(null === undefined); //false
for in
var hoge = { a: 1, b: 2, c: 3 };
for (var paramName in hoge)
{
console.log(paramName,hoge[paramName]);
}
a 1
b 2
c 3
オブジェクトがもつメンバ変数の名前を取得できるイメージ
operator[]でその値へのアクセスができる
class版
class Hoge
{
constructor()
{
this.a = 1;
this.b = 2;
this.c = 3;
}
};
var hoge = new Hoge();
for (var paramName in hoge)
{
console.log(paramName,hoge[paramName]);
}
#Arrayが便利
[1, 2, 3]
.map(value => value * 2)
.forEach((value, index) => { console.log(index, value); });
便利そう(小並感)
おまけ
範囲ベースforはfor ofになる
var ar = [1, 2, 3];
for (var elm of ar)
{
console.log(elm);
}
ブロックスコープがない
{
var hoge = 1;
var hoge = 2;
}
console.log(hoge);//2
変数の再宣言をしていたりスコープから外れてしまったり
こういったコードは問題なく通ってしまう
{
let hoge = 1;
//let hoge = 2; error
}
//console.log(hoge); error
varではなくletにすればブロックスコープを実現できる
JSに不慣れな自分は基本letにすれば良いのでは?って思った
classにアクセス指定子はない
privateとかpublicとかがないそうだ
解決策は調べるといろいろでてくる
そもそも昔はclass構文もなくfunctionでそれっぽいことしてたようで驚いた
operatorオーバーロードはできない?
C++が好きな人はこれができると嬉しい(しらんけど)
まとめ
完全な入門者の視点で印象的だったことをまとめた
入門者なのでいろいろ教えてください
まだまだ勉強途中なので続編はでるかも
Haskellを勉強すればJSとH勉強してるって言える