JavaScriptの研究ノート(3)---機能、標準オブジェクト

JavaScriptを:機能、標準オブジェクト

知人機能

Javaメソッドの機能が分かりやすく、文の集まりである、我々は再利用を実現するために抽出することができ、同じです!

JavaScriptでは、以下の機能を定義します。

function abs(x) {
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}

次のように定義されたABS上記()関数です。

  • function彼は、これは関数定義であることを指摘しました。
  • abs関数の名前です。
  • (x)関数パラメータは、括弧内に複数のパラメータが記載されている、パーティション。
  • { ... }関数の本体間のコードは、いくつかの文を構成する、あるいは任意の記載がないことがあります。

実行時の関数本体内のステートメントは、一度戻すために実行されたことをノート、関数の実装が完了し、結果が返されます。したがって、内部関数は、条件によって決定され、サイクルが非常に複雑なロジックを達成することができます。

ノーリターン文の場合は、関数が終了した後に実行結果を返しますが、結果は未定義です。

JavaScript関数が目的であるので、ABS上に定義した()関数は、実際には関数オブジェクトであり、関数名のABSは機能を指すように変数と考えることができます。

次のようにこのように、第二の機能が定義されます。

var abs = function (x) {
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
};

このように、関数(x)は{...}匿名関数であり、それは名前を機能しません。しかし、変数で、そのため、変数に割り当てられた腹筋、この無名関数を使用すると、関数を呼び出すことができ、ABS。

どちらも完全に同等の定義、関数本体の末尾に追加するための完全な構文の必要性による第2の方法に注意が、代入文の終わりを示します。

:あなたがするためにパラメータを渡す、関数を呼び出すとき

abs(10); // 返回10
abs(-9); // 返回9

内部関数は、これらのパラメータを必要としませんがJavaScriptは、あなたがコールに影響を与えることなく、任意のパラメータを渡すことができますので、問題はないよりも、多くのパラメータによって定義されて入ってくるパラメータので:

abs(10, 'blablabla'); // 返回10
abs(-9, 'haha', 'hehe', null); // 返回9

以下に定義されたパラメータより入ってくることは問題ではありません。

abs(); // 返回NaN

未定義の受信を回避するには、パラメータをチェックすることができます。

function abs(x) {
    //类型比较,和抛出异常~
    if (typeof x !== 'number') {
        throw 'Not a number';
    }
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}

引数仕事への唯一の関数内で、決して、着信、発信者の現在の関数のすべてのパラメータを指します。使用引数は、あなたは、呼び出し側から渡されたすべてのパラメータを取得することができます。言い換えれば、関数は任意のパラメータを定義していない場合でも、あなたはまだ、パラメータの値を取得することができます:

function abs() {
    if (arguments.length === 0) {
        return 0;
    }
    var x = arguments[0];
    return x >= 0 ? x : -x;
}

abs(); // 0
abs(10); // 10
abs(-9); // 9

残りのパラメータ

ES6標準紹介がパラメータを休ま:

function foo(a, b, ...rest) {
    console.log('a = ' + a);
    console.log('b = ' + b);
    console.log(rest);
}

foo(1, 2, 3, 4, 5);
// 结果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]

foo(1);
// 结果:
// a = 1
// b = undefined
// Array []

休息のパラメータだけ、と...ロゴフロント、最終的に、営業成績から見て、引数は、B、配列内の残りの部分に余分な変数パラメータをバインドするために渡さに書き込むことができ、我々はもはや必要引数ので、すべてのパラメータを取得します。

引数がパラメータのも、通常の定義が満たされなかった渡された場合、それは問題で、残りのパラメータは、空の配列(未定義でないことに注意)を受信しません。

変数のスコープと解体の割り当て

JavaScriptでは、変数varにスコープが実際に存在していると述べました。

体内変数関数の宣言は、この変数の範囲は、全身の関数である場合、変数は、インビトロ関数で参照されていません。

'use strict';

function foo() {
    var x = 1;
    x = x + 1;
}

x = x + 2; // ReferenceError! 无法在函数体外引用变量x

2つの異なる機能は、各変数で確認した場合、変数は、インビボでの機能で働きます。換言すれば、同じ変数が互いに独立して、互いに独立して異なる内部機能です。

'use strict';

function foo() {
    var x = 1;
    x = x + 1;
}

function bar() {
    var x = 'A';
    x = x + 'B';
}

JavaScript関数を入れ子にすることができるので、この時点で、内部関数が外部変数定義関数、逆の場合も同様にアクセスすることができます。

'use strict';

function foo() {
    var x = 1;
    function bar() {
        var y = x + 1; // bar可以访问foo的变量x!
    }
    var z = y + 1; // ReferenceError! foo不可以访问bar的变量y!
}

関数と同じ名前の外部関数内の変数名はどのように行いますか?テストするには:

function foo() {
    var x = 1;
    function bar() {
        var x = 'A';
        console.log('x in bar() = ' + x); // 'A'
    }
    console.log('x in foo() = ' + x); // 1
    bar();
}

foo();

この表示されていることに「内側」から変数や表情を見たときに、それ自体が起動する関数定義からJavaScript関数「外」。もし内部変数と関数は、同じ名前の外部関数、外部変数の「マスキング」機能の関数内でその変数を定義します。

可変リフト

JavaScriptの関数定義は、関数文の全身をスキャンする機能があり、すべての変数は、関数の先頭に「アップグレード」と宣言しました:

'use strict';

function foo() {
    var x = 'Hello, ' + y;
    console.log(x);
    var y = 'Bob';
}

foo();

strictモードが、文のVAR Xが、=「こんにちは、」+ Y;与えられない、の変数yが、後で確認したので。しかしにconsole.log表示こんにちは、yは定義されていない未定義、説明変数。これは、JavaScriptエンジンが自動的に変数yの宣言を強化するためですが、代入変数yは改善されません。

上記のfoo()関数のためには、JavaScriptコード相当エンジンは以下を参照してください。

function foo() {
    var y; // 提升变量y的申明,此时y为undefined
    var x = 'Hello, ' + y;
    console.log(x);
    y = 'Bob';
}

このため、奇妙な「機能」JavaScript、および私たちは内部で定義された関数の変数のため、厳密にルール「最初にすべての変数を宣言内部関数」を遵守。最も一般的なアプローチは、VARで使用する関数内のすべての変数を宣言することです:

function foo() {
    var
        x = 1, // x初始化为1
        y = x + 1, // y初始化为2
        z, i; // z和i为undefined
    // 其他语句:
    for (i=0; i<100; i++) {
        ...
    }
}

グローバルスコープ

任意の定義された変数の意志関数はグローバルスコープを持っている内にありません。実際には、JavaScriptがグローバルスコープが実際にウィンドウのプロパティにバインドされ、デフォルトのグローバルオブジェクトウィンドウがあります。

'use strict';

var course = 'Learn JavaScript';
alert(course); // 'Learn JavaScript'
alert(window.course); // 'Learn JavaScript'

そのため、グローバル変数とアクセスwindow.courseへの直接のアクセスはもちろん、まったく同じです。

関数は二つの方法で定義されているので、そのため、関数のトップレベルの定義は、グローバル変数、およびタイであると考えられる、関数(){}関数は、実際にグローバル変数によって定義さ=可変にするvar FOOに、推測しますwindowオブジェクトに固定されて:

'use strict';

function foo() {
    alert('foo');
}

foo(); // 直接调用foo()
window.foo(); // 通过window.foo()调用

さらに、ハザード推測、私たちが直接警告()関数を呼び出すたびに、実際の変数ウィンドウです:

window.alert('调用window.alert()');
// 把alert保存到另一个变量:
var old_alert = window.alert;
// 给alert赋一个新函数:
window.alert = function () {}
alert('无法用alert()显示了!');
// 恢复alert:
window.alert = old_alert;
alert('又可以用alert()了!');

ローカルスコープ

JavaScriptを変数のスコープは、実際に内部関数であり、我々はしているので、文ブロックが不可能なループのためのローカルスコープで変数を定義するために導入されたバージョン:

'use strict';

function foo() {
    for (var i=0; i<100; i++) {
        //
    }
    i += 100; // 仍然可以引用变量i
}

ブロックレベルのスコープを解決するために、ES6は新しいキーワードは、代替的に、可変ブロック・レベルの範囲を宣言することができるLETのVARを使用して、聞かせて導入します。

'use strict';

function foo() {
    var sum = 0;
    for (let i=0; i<100; i++) {
        sum += i;
    }
    // SyntaxError:
    i += 1;
}

定数

VARとして、あなたはES6が仕事をしない前に、定数を宣言する場合、我々は通常、「その値は変更しないようにし、これが一定である」表現するために、すべて大文字の変数を使用し、断言変数をしてみましょう:

var PI = 3.14;

ES6標準を発表、定数のconstを定義するのconstとブロックレベルのスコープを持ってみましょうするための新しいキーワード:

'use strict';

const PI = 3.14;
PI = 3; // 某些浏览器不报错,但是无效果!
PI; // 3.14

方法

オブジェクト内の関数を結合させる方法は、オブジェクトが参照しました。

JavaScriptでは、オブジェクトは次のように定義されています。

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        var y = new Date().getFullYear();
        return y - this.birth;
    }
};

xiaoming.age; // function xiaoming.age()
xiaoming.age(); // 今年调用是25,明年调用就变成26了

メソッドと呼ばれるオブジェクトに関数にバインドされ、そしてこのようなものがあることが何であるか、一般的な機能にも違いが欠如しているが、それはこの内のキーワードを使用していますか?

メソッド内で、これは特別な変数であり、それは常に、この変数を暁される現在のオブジェクトを指します。だから、this.birthは出産の暁明プロパティを取得することができます。

標準オブジェクト

JavaScriptの世界では、すべてが対象です。

しかし、いくつかのオブジェクトや他のオブジェクトは同じではありません。オブジェクトの種類を区別するために、我々はtypeof演算演算子を持つオブジェクト型を取得し、それは常に文字列を返します。

typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'

日付

JavaScriptでは、Dateオブジェクトは、日付と時刻を示すために使用されます。現在の時刻を取得するには、以下を使用します。

var now = new Date();
now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
now.getFullYear(); // 2015, 年份
now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月
now.getDate(); // 24, 表示24号
now.getDay(); // 3, 表示星期三
now.getHours(); // 19, 24小时制
now.getMinutes(); // 49, 分钟
now.getSeconds(); // 22, 秒
now.getMilliseconds(); // 875, 毫秒数
now.getTime(); // 1435146562875, 以number形式表示的时间戳

ユーザが任意の値に現在時刻を設定することができるので、現在の時刻から取得ブラウザネイティブオペレーティングシステムは、それが必ずしも正確でない時間であることに留意されたいです。

あなたはDateオブジェクトの指定した日付と時刻を作成する場合は、使用することができます。

var d = new Date(2015, 5, 19, 20, 15, 30, 123);
d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST)

あなたは非常に場所を観察することができる、非常にピットの父は、JavaScriptを我々が渡され、月の範囲は非常に6月に表すことが...... 0から11、1月の0、2月1日までの整数で表されている5です!これは、JavaScriptの脳の設計者はビットをポンプましたが、今では修理不可能であった間違いです。

時間Dateオブジェクトは、常にブラウザのタイムゾーン表示によって表されるが、我々は唯一のローカルタイムを表示することができ、UTC時間も調整した後に表示することができます。

var d = new Date();
d.toLocaleString(); 
d.toUTCString(); 

JSON

JSONはデータ交換フォーマットであるJavaScriptのオブジェクト表記の頭文字です。

JSONが登場する前に、我々は、データを渡すためにXMLを使用してきました。XMLはテキスト形式なので、それは、ネットワークを介してデータを交換するために適しています。XML自体は複雑ではありませんが、後でなどの複雑な仕様DTD、XSD、XPathの、XSLT、多くので、任意の通常のXMLソフトウェア開発者の出会いは大きな頭を感じるだろうし、最終的に我々はあなたがいくつかを勉強しようとしている場合でも、ことがわかりました数ヶ月、それは今までXMLの仕様を知らないかもしれません。

巨大な少数の長期的なエンタープライズソフトウェアをだまされながら苦境の中に閉じ込め節約するために最後に、2002年のソフトウェア・エンジニアの日、ダグラス・クロックフォード(ダグラス・クロックフォード)の学生、この超軽量JSONデータの発明交換フォーマット。

そして、JSONも死んで、設定された文字セットがUTF-8にする必要があり、それは多言語問題なしを表します。解析するJSON文字列の規定を統一するために「オブジェクトのキーは二重引用符を使用しなければならない」二重引用符「で囲む必要があります。」

JSONので非常に簡単で、すぐにウェブの世界を席巻し、ECMA標準になって。ビルトインのJavaScript JSONの解析ので、ほぼすべてのプログラミング言語は、JavaScriptでJSONの構文解析ライブラリは、私たちが直接JSONを使用することができます持っています。

JSONは、任意のJavaScriptオブジェクトとなり、オブジェクトは、それは、ネットワークを介して他のコンピュータに送信することができるように、文字列にシーケンスJSON形式にあります。

私たちは、JSON文字列の書式を受け取った場合、あなたはJavaScriptでオブジェクトを直接使用することができ、それがJavaScriptオブジェクトにデシリアライズ取ります。

JavaScript言語では、すべてが対象です。したがって、支持体のJavaScriptの任意のタイプは、文字列、数値、オブジェクト、配列など、JSONで表すことができます。彼の要求と構文を見てください:

  • データのキーと値のペアは、カンマで区切られたようにオブジェクトが表されています
  • オブジェクトの保存ブレース
  • 保存配列の四角ブラケット

JSONのキーと値のペアの文言は、JavaScriptのオブジェクトを保存するための一つの方法であり、また、JavaScriptのオブジェクト、キー/値のペアの組み合わせEDITORIALキーと二重引用符「」パッケージ、コロンと類似:続く、パーティション、および値:

{"name": "QinJiang"}
{"age": "3"}
{"sex": "男"}

多くの人々は、JSONとJavaScriptのオブジェクト間の関係を知って、そして不明瞭であっても誰もいません。実際には、それは理解することができます。

  • JSオブジェクトを使用してテキスト情報を表すJSONはJavaScriptのオブジェクトの文字列表現は、本質的に、文字列です。

    var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
    var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

JSONとJavaScriptオブジェクトシステム変換

  • JSON.parse()メソッドを使用して、JavaScriptオブジェクトにJSON文字列を達成するために:

    var obj = JSON.parse('{"a": "Hello", "b": "World"}'); 
    //结果是 {a: 'Hello', b: 'World'}
  • JSON.stringify()メソッドを使用して、JavaScriptのオブジェクトのJSON文字列からの変換を達成するために:

    var json = JSON.stringify({a: 'Hello', b: 'World'});
    //结果是 '{"a": "Hello", "b": "World"}'

コードの場合:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON_秦疆</title>
</head>
<body>

<script type="text/javascript">
    //编写一个js的对象
    var user = {
        name:"秦疆",
        age:3,
        sex:"男"
    };
    //将js对象转换成json字符串
    var str = JSON.stringify(user);
    console.log(str);
    
    //将json字符串转换为js对象
    var user2 = JSON.parse(str);
    console.log(user2.age,user2.name,user2.sex);

</script>

おすすめ

転載: www.cnblogs.com/xjtu-lyh/p/12392308.html