「JavaScript高級プログラム設計第3章基本概念」ノート
14293 ワード
3.1文法
jsのすべては変数、関数名、オペレータが大文字と小文字を区別します.
3.1.2識別子
最初の文字はアルファベットまたはアンダースコアまたは$でなければなりません.他の文字は前の3文字以外にも数字があります.
3.1.3コメントのスタイル
二つの種類:
ES 5は厳格なモードを導入しています.任意の位置に下記のコードを記入します.即ち、厳格なモードをオンにして、いくつかのコードの実行は異常を投げます.
jsコードが終わったら追加しなくてもいいです.コードを圧縮する時にも便利です.
3.3変数
5種類の簡単なデータタイプ:Udefined、Null、Boolean、Number、String.
1種類の複雑なデータタイプ:Object
3.4.1 typeof操作符
このタイプは一つの値しかありません.undefined:
一つの値しかないです.null.
このタイプの2つの値:trueとfalse.
データの種類
trueの値に変換
falseの値に変換
ボロア
true
false
String
空でない文字
'(空の文字列)
Number
ゼロ以外の数値(無限大を含む)
0とNaN
Object
任意のオブジェクト
null
Udefined
存在しません
undefined
二つの値、整数、浮動小数点.
1.浮動小数点数
Not a Numberは、数値ではありません.
3つの関数が非数値を変換できます.Number()、パーrseInt()、パーrseFloat()です.
Number()変換規則
データの種類
規則を転換する
ボロア
true=1、false=0
数値
元の数字
null
0
undefined
NaN
String
1.文字列に数字だけが含まれていて、前の正負番号を含むと、プリアンブルの0は無視されます.2.文字列が有効な浮動小数点フォーマットであれば、対応する浮動小数点値に変換して、先頭0も無視します.3.文字列に有効な16進数が含まれていれば、対応する10進数に変換します.4.文字列が空であれば、0に変換します.5.その他内容の、NaNに変換する.
Object
まず対象のvalueOf()メソッドを呼び出して、上の規則に従って変換します.もし変換の結果がNaNなら、対象のtostring()メソッドを呼び出して、再度前の規則を適用します.方法は、この方法を呼び出し、上記の規則に従って変換します.もしvalueOf方法がないなら、toStering()メソッドを呼び出して変換します.
タイプを変換
規則を転換する
文字列
文字列の前のスペースを無視します.スペースでない文字が見つかるまで、文字が数字でない場合や正の負の番号でない場合は、NaNに戻ります.数字であれば、非数値文字に出会うまで解析を続けます.
数値
整数部分を取る
タイプ
ルール
文字列
1番目の非空文字から、無効な浮動小数点が発生するまでは、小数点も有効文字です.10進数のみを識別します.例えば16進数は0に解析されます.
数値
対応する値に変換します.小数点以下で0なら整数に変換します.
シングルクォーテーションマークまたはダブルクォーテーションマークで囲まれた16ビットのunicode文字からなるシーケンスです.文字列は不変性があります.作成が成功したら、再変更はできません.
1.値、ブール値、オブジェクトおよび文字列値は、toString()メソッドを呼び出すことができます.
1)もし値がString()の方法があるなら、この方法を呼び出す.
2) nullなら、’null’に戻ります.
3)undefinedであれば、'undefined'を返します.
中国語の名前のオブジェクトは、データと機能のセットです.字面量とnewの2つの方式で作成されます.
3.5操作子
3.5.1元の操作符
つまり、++と逓減、-、一円+と-、全部でこの4つです.彼らは直接にNumberタイプを操作できます.Numberタイプでないと、バックグラウンドは自動的にNumber()変換規則に従ってNumberタイプに変換してから操作します.
jsの数値は64ビット記憶で、ビット操作は32ビットしか操作しません.操作の対象が数値ではないなら、他のタイプです.やはりNumber()規則に従って先に数値に変換してから、ビット操作を適用します.これらの操作には反~、和&、または|、異^、左に移動します.符号なしで右に移動します.
3.5ブール操作子
1.非論理
Boolean()を使って規則を変えて、反対を取ります.
この操作はショート操作だと覚えてください.通常は操作数1&&操作数2で、Boolean(操作数1)がtrueであれば、操作数2に戻り、Boolean(操作数1)がfalseであれば、動作数1に戻ります.
形式は操作数1|124;操作数2であり、Boolean(操作数1)がtrueであれば、操作数1を返します.そうでなければ、操作数2を返します.
1.掛け算
二つの操作数はいずれも数値であることが要求されます.いずれも数値ではない場合、Number()変換規則を適用して、先に数値タイプに変換して、乗算を行います.もし演算の結果が数値範囲を超えたら、正負無限大表示、すなわちInfinityまたはInfinityを使用します.
掛け算に似ています
上のと似ています.
3.3.5プラス操作符
1.加算
一つの操作数が文字列であれば、他のものも文字列に変換して接続します.
足し算と似ていますが、減算は2つの操作数が数値の種類であることが要求されますので、その中に違いがあれば、Number()変換規則が適用されます.
4つの種類を包んで、大きさは以下で、等しいより小さいです.両方の操作数が文字列であれば、文字列の字典順でサイズを比較します.全部でなければ、Number規則で数値に変換してから比較します.
2組の操作符があります.等しいかどうか、合同かどうか.
1.等しいかどうか
すなわち==と!=二つの操作子で、ルールが特殊です.両方の動作数が文字列である場合、比較内容が同じかどうかは、すべて対象である場合、参照が同じかどうかを比較します.そうでない場合は、Number()変換規則を使用して変換されます. はいくつかの特殊な情況があって、nullとundefinedは等しいです.もし一つの操作数がNaNであるなら、等しい操作はfalseに戻ります.同じ操作ではなく、trueに戻ります.
2.合同と不全など
すなわち========は、この2つのオペレータの操作数は、まず1つのタイプです.
variable=bootlean×pression?true value:falsevalue;
もしブックleanue pressionがtrueであれば、true valueに戻ります.そうしないとfalseuvalueに戻ります.
3.5.値演算子
あります=,+=,*==,-=,<=>>>=>
3.5.10カンマ操作子
if、do-while、while、for、break、conting ue、lable、switchは他の言語と似ています.何も言いません.
with文は推奨されていないので、話さないようにします.
for-i n文
オブジェクトの属性を列挙します.
switchはちょっと特殊です.switchではどんな種類のデータが使えますか?caseでは定数、変数または表現ができます.
文法は
function functionName(arg 0,arg 1,…argN){
statement
)
厳密なモードには制限があります.関数やパラメータをevallやargmentsと名づけないでください.
jsのすべては変数、関数名、オペレータが大文字と小文字を区別します.
3.1.2識別子
最初の文字はアルファベットまたはアンダースコアまたは$でなければなりません.他の文字は前の3文字以外にも数字があります.
3.1.3コメントのスタイル
二つの種類:
//
/*
*
*/
3.1.4厳格モードES 5は厳格なモードを導入しています.任意の位置に下記のコードを記入します.即ち、厳格なモードをオンにして、いくつかのコードの実行は異常を投げます.
"use strict";
3.1.5文jsコードが終わったら追加しなくてもいいです.コードを圧縮する時にも便利です.
3.3変数
var message = 'hi';// , var ,
message = 2;//
message2 = 'hi2';// var, ,
function test() {
var message = 'hi';// ,message test
message2 = 'hi';// var, ,
}
console.log(message); // undefined
console.log(message2); // hi
var message = 'hi', found = true, age = 29;//
3.4データタイプ5種類の簡単なデータタイプ:Udefined、Null、Boolean、Number、String.
1種類の複雑なデータタイプ:Object
3.4.1 typeof操作符
console.log(typeof 'hi'); // string
console.log(typeof message); // undefined,
var obj = null;
console.log(typeof obj); // object
console.log(typeof 2); // number
console.log(typeof true); // boolean
console.log(typeof function(){}); // function
3.4.2 Unidefinedタイプこのタイプは一つの値しかありません.undefined:
var message;
console.log(message);// undefined,
var message2 = undefined;
console.log(message2);// undefined, undefined
"use strict";//
//
console.log(age); // ReferenceError: age is not defined,
// undefined
console.log(typeof age); // undefined
// ,
delete age;//SyntaxError: Delete of an unqualified identifier in strict mode.
3.4.3 Nullタイプ一つの値しかないです.null.
var car = null;
console.log(typeof car); // object
3.4.4 Booleanタイプこのタイプの2つの値:trueとfalse.
var found = true, lost = false;
console.log(found, lost);// true false
他のタイプはBooleanタイプに変換できます.Boolean()関数を使います.var msg = 'Hello world';
console.log(Boolean(msg)); // true
Boolean()変換規則データの種類
trueの値に変換
falseの値に変換
ボロア
true
false
String
空でない文字
'(空の文字列)
Number
ゼロ以外の数値(無限大を含む)
0とNaN
Object
任意のオブジェクト
null
Udefined
存在しません
undefined
var msg = 'Hello world';
if (msg) { // , , true
console.log('msg is true'); // msg is true
}
3.4.5 Numberタイプ二つの値、整数、浮動小数点.
1.浮動小数点数
var floatNum1 = 1.1, floatNum2 = 0.1, floatNum3 = .1, floatNum4 = 3.125e7;
console.log(floatNum1, floatNum2, floatNum3, floatNum4); // 1.1 0.1 0.1 31250000
// , , ,
//
if (0.1 + 0.2 === 0.3) {
console.log('0.1+0.2 = 0.3');
} else {
console.log('0.1+0.2 !== 0.3');
}
2.数値範囲// ,
console.log(Number.MIN_VALUE, Number.MAX_VALUE);// 5e-324 1.7976931348623157e+308
// , , ,
//
console.log(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY);//-Infinity Infinity
// isFinite
console.log(isFinite(Number.POSITIVE_INFINITY), isFinite(2)); // false true
3.NaNNot a Numberは、数値ではありません.
// 0/0 NaN
console.log(0/0, 2/0, -2/0); //NaN Infinity -Infinity
// NaN !== NaN
console.log(NaN === NaN); // false
// isNaN() , Number()
console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN('10')); // false ( 10)
console.log(isNaN('blue')); // false ( )
console.log(isNaN(true)); // false (true 1)
4.数値変換3つの関数が非数値を変換できます.Number()、パーrseInt()、パーrseFloat()です.
Number()変換規則
データの種類
規則を転換する
ボロア
true=1、false=0
数値
元の数字
null
0
undefined
NaN
String
1.文字列に数字だけが含まれていて、前の正負番号を含むと、プリアンブルの0は無視されます.2.文字列が有効な浮動小数点フォーマットであれば、対応する浮動小数点値に変換して、先頭0も無視します.3.文字列に有効な16進数が含まれていれば、対応する10進数に変換します.4.文字列が空であれば、0に変換します.5.その他内容の、NaNに変換する.
Object
まず対象のvalueOf()メソッドを呼び出して、上の規則に従って変換します.もし変換の結果がNaNなら、対象のtostring()メソッドを呼び出して、再度前の規則を適用します.方法は、この方法を呼び出し、上記の規則に従って変換します.もしvalueOf方法がないなら、toStering()メソッドを呼び出して変換します.
// Boolean
console.log(Number(true), Number(false));// 1 0
//
console.log(Number(1), Number(1.02)); // 1 1.02
//
console.log(Number('1'), Number('+1'), Number('+011')); // 1 1 11
console.log(Number('+01.1')); // 1.1
console.log(Number('+00xf'), Number('0xf')); // NaN 15
console.log(Number(""), Number('011s'));// 0 NaN
//
let a = {
valueOf: function() {
return '2';
}
}, b = {
valueOf: function() {
return 'b';
},
toString: function() {
console.log('should not print');
return '2';
}
}, c = {
valueOf: function() {
return 'c';
},
toString: function() {
return 'c';
}
}, d = {
toString: function() {
return '2';
}
};
console.log(Number(a), Number(b), Number(c), Number(d));// 2 NaN NaN 2
parseInt()変換規則タイプを変換
規則を転換する
文字列
文字列の前のスペースを無視します.スペースでない文字が見つかるまで、文字が数字でない場合や正の負の番号でない場合は、NaNに戻ります.数字であれば、非数値文字に出会うまで解析を続けます.
数値
整数部分を取る
console.log(parseInt(" -0022"));// -22
console.log(parseInt(' a2')); // NaN
console.log(parseInt('1234blue')); // 1234
console.log(parseInt('')); // NaN
console.log(parseInt(22.5)); // 22
console.log(parseInt('070')); // 70
console.log(parseInt('0xf')); // 15
// parseInt 2 ,
console.log(parseInt('0xaf', 16));//175
console.log(parseInt('af', 16));//175
console.log(parseInt('af'));//NaN, 2
console.log(parseInt('10', 2));// 2
console.log(parseInt('10', 8));// 8
console.log(parseInt('10', 10)); // 10
console.log(parseInt('10', 16)); // 16
parseFloat変換ルールタイプ
ルール
文字列
1番目の非空文字から、無効な浮動小数点が発生するまでは、小数点も有効文字です.10進数のみを識別します.例えば16進数は0に解析されます.
数値
対応する値に変換します.小数点以下で0なら整数に変換します.
console.log(parseFloat('1234blue')); // 1234
console.log(parseFloat(' +002.4')); // 2.4
console.log(parseFloat('0xf')); // 0
console.log(parseFloat(22.5));//22.5
console.log(parseFloat('22.34.5')); // 22.34
console.log(parseFloat('3.125e7')); // 31250000
console.log(parseFloat(22.0)); // 22
3.4.6 Stringタイプシングルクォーテーションマークまたはダブルクォーテーションマークで囲まれた16ビットのunicode文字からなるシーケンスです.文字列は不変性があります.作成が成功したら、再変更はできません.
var lang = 'Java';
lang = lang + 'Script';// lang,
console.log(lang);// JavaScript
変換文字列には2つの方法があります.1.値、ブール値、オブジェクトおよび文字列値は、toString()メソッドを呼び出すことができます.
var age = 2, found = true;
console.log(age.toString(), found.toString());// 2 true
// undefined, null toString() ,
// toString() ,
var num = 10;
console.log(num.toString(2));// 1010
console.log(num.toString(16));// a
2.String()の使い方1)もし値がString()の方法があるなら、この方法を呼び出す.
2) nullなら、’null’に戻ります.
3)undefinedであれば、'undefined'を返します.
let a = {
toString: function() {
return 'a';
}
}
console.log(String(null), String(undefined), String(a));// null undefined a
3.4.7 Objectタイプ中国語の名前のオブジェクトは、データと機能のセットです.字面量とnewの2つの方式で作成されます.
var obj1 = {};// ,
var obj2 = new Object();// new
var obj3 = new Object;// ,
Objectはすべてのオブジェクトの基礎であり、その例は以下のような属性と方法を有する.let a = {
age: 12
}, b = Object.create(a);// a b
b.name = 'henry';
// constructor,
console.log(b.constructor); // [Function: Object]
// hasOwnProperty(propertyName), ,
console.log(b.hasOwnProperty('name'));// true
console.log(b.hasOwnProperty('age'));// false
// isPrototypeOf(object), object
console.log(a.isPrototypeOf(b));// true
// propertyIsEnumerable(propertyName), for-in 。
console.log(b.propertyIsEnumerable('name')); // true
//
Object.defineProperty(b, 'name2', {
value: 'name2',
enumerable: false
});
console.log(b.name2, b.propertyIsEnumerable('name2'));// name2 false
for (var property in b) {
console.log(property);
}// name age, age,
// propertyIsEnumberable false, ,
//
console.log(b.propertyIsEnumerable('age'));//false
// toLocaleString(), toString(),
// valueOf(), 、 。
// 。
BOMとDOMオブジェクトは宿主オブジェクトであり、必ずしもObjectから継承されるとは限りませんので、上記の方法は含まれていないかもしれません.3.5操作子
3.5.1元の操作符
つまり、++と逓減、-、一円+と-、全部でこの4つです.彼らは直接にNumberタイプを操作できます.Numberタイプでないと、バックグラウンドは自動的にNumber()変換規則に従ってNumberタイプに変換してから操作します.
// + ,
console.log(+'01', +'1.1', +'z', +false, +1.1); // 1 1.1 NaN 0 1.1
let a = {
valueOf: function() {
return 1;
}
}, b = {
valueOf: function() {
return '2'
}
}, c = {//valueOf toString() , ,
valueOf: function() {
return 'a';
},
toString: function() {
return '3';
}
}, d = {
toString: function() {
return '4';
}
};
console.log(+a, +b, +c, +d);//1 2 NaN 4
3.5.操作子jsの数値は64ビット記憶で、ビット操作は32ビットしか操作しません.操作の対象が数値ではないなら、他のタイプです.やはりNumber()規則に従って先に数値に変換してから、ビット操作を適用します.これらの操作には反~、和&、または|、異^、左に移動します.符号なしで右に移動します.
3.5ブール操作子
1.非論理
Boolean()を使って規則を変えて、反対を取ります.
console.log(!false, !'blue', !NaN, !'', !12);//true false true true false
2.論理と&&&この操作はショート操作だと覚えてください.通常は操作数1&&操作数2で、Boolean(操作数1)がtrueであれば、操作数2に戻り、Boolean(操作数1)がfalseであれば、動作数1に戻ります.
console.log(NaN && true);// NaN
console.log({} && 2);//2
3.論理や12462;12462;形式は操作数1|124;操作数2であり、Boolean(操作数1)がtrueであれば、操作数1を返します.そうでなければ、操作数2を返します.
console.log(NaN || true); // true
console.log({} || 2);// {}
// || , 。
function func(param) {
var value = param || 'no value';// param , 'no value';
console.log(value);
}
func('param');// param
func();// no value
3.2.4乗性操作子1.掛け算
二つの操作数はいずれも数値であることが要求されます.いずれも数値ではない場合、Number()変換規則を適用して、先に数値タイプに変換して、乗算を行います.もし演算の結果が数値範囲を超えたら、正負無限大表示、すなわちInfinityまたはInfinityを使用します.
console.log(Number.MAX_VALUE * Number.MAX_VALUE); // Infinity
console.log(-Number.MAX_VALUE * Number.MAX_VALUE); // -Infinity
console.log(2*'3');//6
console.log('3'*'4'); // 12
console.log('a'*'b'); // NaN
console.log(2 * Number.POSITIVE_INFINITY);// Infinity
2.除法掛け算に似ています
console.log(6/'3');// 2
console.log('12'/'4'); // 3
console.log('a'/'b'); // NaN
console.log(0/0);// NaN
console.log(2/0);// Infinity
console.log(-2/0);// -Infinity
console.log(Number.POSITIVE_INFINITY/1);// Infinity
3.金型を求める上のと似ています.
3.3.5プラス操作符
1.加算
一つの操作数が文字列であれば、他のものも文字列に変換して接続します.
console.log(2+3); // 5
console.log(2+'2'); // 22
console.log(undefined+undefined); // NaN
console.log(null+null);//0
console.log(2+NaN);//NaN
console.log(Infinity + 3);// Infinity
console.log(Infinity + 'a');//Infinitya
2.減算足し算と似ていますが、減算は2つの操作数が数値の種類であることが要求されますので、その中に違いがあれば、Number()変換規則が適用されます.
console.log(5- true);//4
console.log(NaN-1);//NaN
console.log(4-'2');//2
console.log(5-null);//5
let a = {
valueOf: function() {
return 1;
}
}, b = {
toString: function() {
return '2';
}
}, c = {};
console.log(a-0, b-0, c-0);// 1 2 NaN
3.5.関係操作子4つの種類を包んで、大きさは以下で、等しいより小さいです.両方の操作数が文字列であれば、文字列の字典順でサイズを比較します.全部でなければ、Number規則で数値に変換してから比較します.
console.log('23' < '3');// true
console.log('23' < 3); // false
// NaN , false
console.log(NaN<3, NaN >=3);// false false
3.5.等しい操作子2組の操作符があります.等しいかどうか、合同かどうか.
1.等しいかどうか
すなわち==と!=二つの操作子で、ルールが特殊です.
2.合同と不全など
すなわち========は、この2つのオペレータの操作数は、まず1つのタイプです.
console.log('55' == 55);//true
console.log('55' === 55);//false
3.5.条件操作子variable=bootlean×pression?true value:falsevalue;
もしブックleanue pressionがtrueであれば、true valueに戻ります.そうしないとfalseuvalueに戻ります.
3.5.値演算子
あります=,+=,*==,-=,<=>>>=>
3.5.10カンマ操作子
//
var a, b, c;
// ,
var d = (1, 2, 3, 4);
console.log(d);//4
3.6文if、do-while、while、for、break、conting ue、lable、switchは他の言語と似ています.何も言いません.
with文は推奨されていないので、話さないようにします.
for-i n文
オブジェクトの属性を列挙します.
let a = {
name: 'name',
value: 'value'
};
for (var prop in a) {
console.log(prop);
}
// name
// value
switch文switchはちょっと特殊です.switchではどんな種類のデータが使えますか?caseでは定数、変数または表現ができます.
switch ('hello world') {
case 'hello' + ' world':
console.log('greeting was found');
break;
default:
console.log('not found');
}
// greeting was found
3.7関数文法は
function functionName(arg 0,arg 1,…argN){
statement
)
厳密なモードには制限があります.関数やパラメータをevallやargmentsと名づけないでください.
/*
arguments , , length ,
,arguments[i] i+1
*/
function howManyArgs(a, b, c) {
console.log(arguments.length);
}
howManyArgs(1,2,3);//3
howManyArgs(1,2);//2
// js , ,
// , arguments
// , ,
function add(a, b) {
console.log(a+b);
}
function add(a) {//
console.log(a+100);
}
add(1,2);// 101
add(1);// 101