2018/8/27 Arrayまとめ javascript

old_arrayの一番最後にvalue1,value2,・・・を配列要素として結合させた新しい配列を返す。(old_array自体はそのまま。)

var myArray = new Array(‘1’, ‘2’, ‘3’);
newArray = myArray.concat(‘a’, ‘b’, ‘c’);

console.log(myArray);  //[“1”, “2”, “3”] console.log(newArray);     //[“1”, “2”, “3”, “a”, “b”, “c”]


配列arrの各要素を繋げた文字列を返す。separator(区切り記号)を指定すればその記号で繋げる。実行しても配列arrはそのまま


配列arrayの末尾にelement1, …, elementNをarrayの要素として追加する。

配列arrayが要素追加後の配列に変化する

返り値は要素追加後の配列の要素数。

var myArray …

2018/08/26 mapとreduceについて javascript

すこし脱線するがmapとreduceについて。

JavaScriptプログラマーならMap()とReduce()で関数型プログラミングを始めてみない?

【JavaScript入門】配列でmapを使う方法(Mapオブジェクトも解説)

とりあえず侍エンジニア塾でmapを調べる。

基本

元の配列( [‘a’,’b’,’c’] )の各要素に対してコールバック関数で定義した処理を適用し、適用後の各要素を持つ配列を返す。

for文、forEach文を使えば同じ処理をできるが、コードがシンプル、宣言する変数の数が少なくて済む(名前衝突が起きる可能性が減る)のがメリット。

map()を実行しても元の配列(上記例なら[‘a’,’b’,’c’])はそのまま(変わらない)。コールバック関数の第三引数を使えば元の配列を操作することも可能。詳しくは侍エンジニア塾

 

2018/8/25 関数つづき アロー関数など

関数

アロー関数まとめ

基本

ⒶをⒷのように書いてもいいよ、と。場合によってはさらに省略した書き方もできる。

●引数を1つの場合、()を省略可能。

●引数がない場合、()は省略できない。

●本文が1文の場合、{  }(←ブロック)も省略可能。


アロー関数の即時関数の書き方

( (引数)=>{ 処理 } )();

ちなみに無名関数の即時関数の書き方

( function(引数){ 処理 } )();


アロー関数内でthisを使うと

ES2015の関数(アロー関数、this、残余引数など)

↑のサイトでthisについてまとめてある。実際実行してみるとその通りの結果になるので書いている通りだと思われる。これじゃ適当過ぎるんで他のサイトも見てみないと。

ただ説明が良くわからない。

具体的には、定義しているスコープのthisを引き継ぐことになる。

と書かれているが。試しに

window.prop = ‘これはグローバルプロパティです。’;
let obj = {
prop: ‘これはobjのプロパティです。’,
func:()=>{
console.log(this.prop);
}…

8/24 関数 つづき javascript

関数 のつづき

入れ子の関数とクロージャ

の部分でまたクロージャ登場。

function outside(x) {
  function inside(y) {
    return x + y;
  }
  return inside;
}
fn_inside = outside(3); // このように考えてください : 与えられたものに 3 を加算する関数を代入します
result 

8/21 繰り返しなど javascript

ループと反復処理

do…while文

do
  文
while (条件式);

順序:文実行→条件式チェック(true)→文実行→条件式チェック(true)→・・・

条件式がfalseを返すまで上記ループ。


continue文とbreak文

ループ中のcontinue→その時点でその回は終了して条件チェックに飛ぶ(for文の場合加算式に飛ぶ)。そしてループ再開。

ループ中のbreak→その時点で一番内側のループを即終了し脱出する。



関数

関数を呼び出す

の部分で「関数宣言前にその関数を呼びたすのは可」だが、「関数式の前にその関数を呼び出すのは不可」が書いてある。詳しくは↓で。

varとletの違い javascript

 

+ (プラス) まとめ javascript

+(プラス)演算子の使い方について。

文字列と数値を+でつなぐ

例)  let ans=5 + ‘7’;

console.log(ans);  //ans=’57’  (←文字列)

文字列(‘7’)と数値(5)を+でつなぐと数値(5)が文字列(‘5’)に型変換されて、文字列の結合が行われる。どこにでも解説があるやつ。


単項プラス演算子の+(プラス)

参考:+”3″+3+”3″が”63″? 意外に知られていないJavaScriptの単項プラス(+)演算子

例)  let ans1=+’8′;

let ans2=+’8’+2;  //ans2=10(数値)

console.log(typeof ans1);   //   number

+を数値でない値の前に記述すると、数値への型変換が行われる

この他に数値へ型変換する方法としてparseInt()関数がある。これを使った方がわかりやすいと思われる。


文字のエスケープについて

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Grammar_and_Types

var str = 'this string \

クロージャーについて javascript

クロージャについては最初、

https://asciidwango.github.io/js-primer/basic/function-scope/

に記述があり、それを見ていた。

静的スコープ

メモリ管理の仕組み

について説明しており、関係はあるのだと思うが、いまいち具体的にまとめられなかった。


次に見つけたのが

クロージャ

この記事にあるコードで説明がつきそう。

function makeFunc() {
  var name = "Mozilla";

  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();

myFunc();

関数makeFunc内で宣言された変数name。これはmakeFunc関数の呼び出しが終わったらガベージコレクションにより消えるんじゃないのか?という話。

しかし

var myFunc = makeFunc();

により変数myFuncには関数…

varとletの違い javascript

文法とデータ型

varとletの違い、変数の巻き上げについて。

  1. varは(関数スコープ以外の)ブロックスコープがない(関数スコープはある)。letはある。
  2. varは変数の巻き上げ(hoisting)が行われる。letは巻き上げが行われない。
  3. varは同じスコープの中で同じ名前の変数を二重に定義してもよい(エラーは出ない)。letやconstではSyntaxErrorが出る。

スコープが異なればletやconstで同じ名前で変数宣言してもよい。

https://asciidwango.github.io/js-primer/basic/function-scope/(関数スコープとvarの巻き上げ、の部分)

よってletでの変数宣言の前にその変数を参照するとReferenceErrorとなる。

varでの変数宣言の場合巻き上げ(hoisting)が行われるのでエラーは出ずundefinedとなる。


関数の巻き上げについて

https://asciidwango.github.io/js-primer/basic/function-scope/(関数宣言と巻き上げ、の部分)

関数宣言→巻き上げが行われる。つまり関数宣言より前の行でその関数を呼び出してもOK。

関数式→変数宣言部分のみ巻き上げられるので暗黙的にundefinedとなる。よって関数を呼び出せない(Type error)。