「JavaScript高級プログラム設計第3章基本概念」ノート

14293 ワード

3.1文法
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.NaN
Not 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.等しいかどうか
すなわち==と!=二つの操作子で、ルールが特殊です.
  • 両方の動作数が文字列である場合、比較内容が同じかどうかは、すべて対象である場合、参照が同じかどうかを比較します.そうでない場合は、Number()変換規則を使用して変換されます.
  • はいくつかの特殊な情況があって、nullとundefinedは等しいです.もし一つの操作数がNaNであるなら、等しい操作はfalseに戻ります.同じ操作ではなく、trueに戻ります.
    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