LoginSignup
27
33

More than 5 years have passed since last update.

Javascript再勉強

Posted at

長年C#erでしたが、そろそろJavaScriptを使いこなせるようになろうと思い再勉強しました。

変数

  • 値には型があるが変数には型はない。

  • 変数名には$も使える。

var a$b = 1
  • 特別な場合を除いて、宣言していない変数を使用しようとするとReferenceErrorが発生する。

  • 変数の宣言のみを行い、値の格納を行わなかった場合には、変数の値はundefinedとなる。

  • 変数には格納されている値の型とは異なる型の値を再格納することができる。

var a = 1
a = "a"

基本データ型

  • 基本データ型はNumberStringBooleanUndefinedNullの5つ。

typeof

  • 値の型を文字列として取得するにはtypeof演算子を使用する。C#のtypeofとは異なる。得られる文字列は"number""string""boolean""undefined""object""function"の何れか。
   typeof(1)
=> 'number'
   typeof("a")
=> 'string'
  • 先述したように値には型があるが変数には型はない。typeofの対象として変数を指定した場合、変数が格納している値の型が取得される。ただし、宣言されていない変数を指定した場合であってもReferenceErrorにはならず、undefinedが得られる。
   typeof(a)
=> 'undefined'
   var a = 1
   typeof(a)
=> 'number'
   a = "a"
=> 'a'
   typeof(a)
=> 'string'

数値

  • 8進数は0から始める。16進数は0xから始める。

  • 値の範囲は倍精度浮動小数点数の範囲。範囲外の値はInfinity又は-Infinityとなる。

  • 任意の数値を0で割ってもInfinityが得られる(エラーにはならない)。

  • Infinity - Infinity-Infinity + Infinityの結果はNaNとなる。

  • 数値演算に失敗した場合もNaNが得られる(エラーにはならない)。

  • null0に変換される。

文字列

  • 一重引用符で囲んでも文字列となる。
  • 文字列のi文字目の文字を文字列として取得するには"hello"[1]のようにする。

真偽値

  • 空文字列、nullundefined0NaNfalseに変換される。それ以外の真偽値でない値はtrueに変換される。

null

  • typeof(null)"object"となる。

比較

  • ==!=は暗黙的に型の変換が行われる。たとえば、1 == "1"trueとなる。暗黙的な型の変換が行われてほしくない場合には、代わりに===!==を使用する。

  • NaN == NaNfalseとなる。

配列

  • 配列は[1, 2, 3]のように作成する。

  • 配列には型がない。[1, 2, "a"]のように異なる型の値を含む配列を作ることができる。

  • aが配列を格納している変数である場合、a[6] = "b"のようにして配列の要素を変更することができる。要素が存在しない場合には追加される。

  • 配列の要素を削除する場合にはdelete演算子を使用する。

  • 存在しない要素を参照した場合にはundefinedが得られる。

関数

function sum(a, b) {
    var c = a + b;
    return c;
}
  • 関数の引数に型はない。

  • 関数名には$も使える。

  • 明示的に値を返さない場合には、暗黙的にundefinedが返る。

  • 関数の呼び出しにおいて引数に値を渡さなかった場合には、その引数の値はundefinedとなる。余分に値を渡した場合には、その値は無視される。ただし、関数の中ではargumentsという変数が参照でき、この変数の値は引数として渡された全ての値から成る配列に似たオブジェクトである(余分に渡された値も併せて格納されている)。配列と同様に添字を使って要素を取得することができる。

  • 関数の中で別の関数を定義することができる。

  • 局所変数の有効範囲は関数単位である。

  • 局所変数は関数の冒頭に巻き上げられる。したがって、下の関数はその下の関数と同じになる。

function f() {
    alert(a);
    var a = 1;
    alert(a);
}
function f() {
    var a;
    alert(a);
    a = 1;
    alert(a);
}

そのため、コード上、局所変数宣言の前にその局所変数を使用してもエラーにはならない同名の大域変数があっても、その大域変数はその関数から見えない

  • 関数を変数に格納することができる。その場合、関数自体には名称を指定しなくても良い。

  • 関数そのもの又は関数を格納した変数に対してtypeof演算子を使用すると、"function"が得られる。

オブジェクト

var o = {
    prop1: yumina, 
    prop2: 25
}
  • プロパティ名は引用符で囲んでも良い。ただし、プロパティ名が変数名として使用できないようなものである場合には、必ず引用符で囲まなければならない。

  • o["prop1"]又はo.prop1のようにしてオブジェクトのプロパティの値を取得することができる。ただし、存在しないプロパティの場合にはundefinedが返る。

  • o["prop1"] = "b"又はo.prop1 = "b"のようにしてオブジェクトのプロパティの値を変更することができる。存在しないプロパティの場合には指定した値でプロパティが追加される。

  • オブジェクトのプロパティを削除する場合にはdelete演算子を使用する。

  • 下のようにオブジェクトを作成するための関数を定義することもできる。ただし、その下のようにreturnでオブジェクトを返した場合、thisではなくそのオブジェクトが返ることになる。しかし、その下のようにreturnでオブジェクト以外のものを返した場合、thisが返る。

function O() {
    this.prop1 = "yumina";
    this.prop2 = 25;
}
function O() {
    this.prop1 = "yumina";
    this.prop2 = 25;

    return {};
}
function O() {
    this.prop1 = "yumina";
    this.prop2 = 25;

    return 1;
}
  • Javascriptで継承
  • Javascriptで継承(補足)

  • オブジェクトのプロパティを列挙する場合にはfor-inを使用する。ただし、for-inでプロパティの列挙を行った場合にはプロトタイプから参照できるプロパティも含められる。

27
33
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
33