// Declare at the beginning
let firstName, lastName, price, discount, fullPrice;
// Use later
firstName = "John";
lastName = "Doe";
price = 19.90;
discount = 0.10;
fullPrice = price - discount;
これはループ変数にも当てはまります。
for (let i = 0; i < 5; i++) {
変数の初期化
変数を宣言するときに変数を初期化することは、コーディングの良い習慣となります。
これを心がけましょう:
よりクリーンなコードを与える
変数を初期化する単一の場所を提供する
未定義の値を避ける
// Declare and initiate at the beginning
let firstName = "";
let lastName = "";
let price = 0;
let discount = 0;
let fullPrice = 0,
const myArray = [];
const myObject = {};
変数を初期化すると、使用目的(および使用目的のデータ型)がわかります。
constでオブジェクトを宣言する
constを使用してオブジェクトを宣言すると、型が誤って変更されるのを防ぐことができます。
例
let car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat"; // Changes object to string
const car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat"; // Not possible
constを使用して配列を宣言する
constを使用して配列を宣言すると、型が誤って変更されるのを防ぐことができます。
例
let cars = ["Saab", "Volvo", "BMW"];
cars = 3; // Changes array to number
const cars = ["Saab", "Volvo", "BMW"];
cars = 3; // Not possible
new Object() を使用しないでください
new String()の代わりに""を使用します。
new Number()の代わりに0を使用します。
new Boolean()の代わりにfalseを使用します。
new Object()の代わりに{}を使用します。
new Array()の代わりに[]を使用します。
new RegExp()の代わりに/()/使用します。
new Function()の代わりにfunction (){}使用します。
例
let x1 = ""; // new primitive string
let x2 = 0; // new primitive number
let x3 = false; // new primitive boolean
const x4 = {}; // new object
const x5 = []; // new array object
const x6 = /()/; // new regexp object
const x7 = function(){}; // new function object
自動型変換に注意
JavaScriptは緩く型付けされています。
変数には、すべてのデータ型を含めることができます。
変数はそのデータ型を変更できます。
例
let x = "Hello"; // typeof x is a string
x = 5; // changes typeof x to a number
数値が誤って文字列またはNaN(非数値)に変換される可能性があることに注意してください。
数学演算を行う場合、JavaScriptは数値を文字列に変換できます。
例
let x = 5 + 7; // x.valueOf() is 12, typeof x is a number
let x = 5 + "7"; // x.valueOf() is 57, typeof x is a string
let x = "5" + 7; // x.valueOf() is 57, typeof x is a string
let x = 5 - 7; // x.valueOf() is -2, typeof x is a number
let x = 5 - "7"; // x.valueOf() is -2, typeof x is a number
let x = "5" - 7; // x.valueOf() is -2, typeof x is a number
let x = 5 - "x"; // x.valueOf() is NaN, typeof x is a number
switch (new Date().getDay()) {
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
break;
default:
day = "Unknown";
}
数値、文字列、およびブール値をオブジェクトとして避ける
数値、文字列、またはブール値を常にプリミティブ値として扱います。オブジェクトとしてではありません。
これらの型をオブジェクトとして宣言すると、実行速度が遅くなり、厄介な副作用が発生します。
例
let x = "John";
let y = new String("John");
(x === y) // is false because x is a string and y is an object.
さらに悪いことに:
例
let x = new String("John");
let y = new String("John");
(x == y) // is false because you cannot compare objects.