データ型
JavaScriptは弱いタイプの言語ですが、タイプがないわけではありません。 JavaScriptは、次の7つの異なるタイプの値を認識できます。
基本的なデータ型
1.ブールリアン
2.数
3.ストリング
4.ヌル
5.未定
6.シンボル
物体
1.アレイ
2. regexp
3.日
4.マス
5 ....
Typeofを使用して、データ型を決定できます。オペレーターは文字列を返しますが、返されるすべての結果が期待に沿っているわけではありません。
typeof false // "boolean" typeof .2 // "number" typeof nan // "number" typeof '' // "string" typeof undefined // "undefined" typeof of of of "typeof" typeof "typeof of of of [] //" objectof alert // "typeof" objed "objed" objed "
変数
アプリケーションでは、変数を使用して値に名前を付けます。変数の名前は識別子と呼ばれます
声明
1。キーワードvar:関数スコープを使用します
2。キーワードを使用しますレッチ:スコープローカル変数をブロックします
3。直接使用:グローバルスコープ
var global_var = 1; function fn(){var fn_var = 2; if(fn_var> 10){let block_var = 3; global_var2 = 4;}}割り当てのみを宣言するだけで、変数のデフォルト値は未定義です
constキーワードは、不変変数を宣言でき、ブロックスコープもできます。不変のオブジェクトの理解には注意が必要です
const num = 1; const obj = {prop: 'value'}; num = 2; // contaught typeerror:定数変数への割り当て.obj ['prop'] = 'value2'; obj = []; // contaught typeerror:定数変数への割り当て。可変強化
JavaScriptは、異なる概念を投げることなく、後で宣言された変数を参照できます。この概念は可変宣言促進(巻き上げ)と呼ばれます
console.log(a); // undefinedvar a = 2;
に相当
var a; console.log(a); a = 2;
関数
関数は、外部コード(または関数自体によって再帰的に呼び出される)で呼び出すことができるサブルーチンです。
関数を定義します
1。関数宣言
2。関数式
3。関数コンストラクター
4。矢印関数
function fn(){} var fn = function(){} var fn = new function(arg1、arg2、... argn、funcbody)var fn =(param)=> {}議論
1.Arguments:現在の実行関数に渡されたパラメーターを含む配列のようなオブジェクト
2.Arguments.length:関数に渡されたパラメーターの数
3.Arguments.Caller:現在関数を実行している関数を呼び出します
4.Arguments.Callee:現在実行中の関数
function foo(){return arguments;} foo(1、2、3); //引数[3] // {"0":1、 "1":2、 "2":3}休む
function foo(... args){return args;} foo(1、2、3); // array [3] // [1、2、3]関数fn(a、b、... args){return args;} fn(1、2、3、4、5); //配列[3] // [3、4、5]デフォルト
関数のパラメーターを定義するときに、デフォルト値を合意できます。
関数fn(a = 2、b = 3){return a + b;} fn(2、3); // 5FN(2); // 5fn(); // 5物体
JavaScriptのオブジェクトは、可変キー付きコレクションです
オブジェクトを定義します
1。文字通り
2。コンストラクター
var obj = {prop: 'value'、fn:function(){}}; var date = new date();コンストラクタ
コンストラクターと通常の関数の間に違いはありません。新しいキーワードで呼び出すことはコンストラクターです。コンストラクターを使用すると、オブジェクトをインスタンス化できます。
関数には2つの可能なリターンがあります
1.明示的に呼び出して、戻り後の式の評価を返すために戻ります
2。返品は呼び出されず、未定義で返されます
function people(name、age){this.name = name; this.age = age;} var people = new People( 'Byron'、26);コンストラクターは値を返します
1.返品値はありません
2。シンプルなデータ型
3。オブジェクトタイプ
コンストラクターは、最初の2つのケースでコンストラクターのインスタンスを返します。この機能は、オブジェクトをインスタンス化することによって使用されます。
3番目のコンストラクターは通常の関数と同じを実行し、戻り後の式の結果を返します
プロトタイプ
1.各関数にはプロトタイプのオブジェクト属性があり、オブジェクトにコンストラクター属性があり、デフォルトで関数自体を指します。
2。各オブジェクトには__Proto__属性があり、Zodiacはその親タイプのプロトタイプを指しています
function person(name){this.name = name;} person.prototype.print = function(){console.log(this.name);}; var p1 = new person( 'byron'); var p2 = new person( 'casper'); p1.print(); p2.print();これとスコープ
範囲は人気のある方法で理解できます
1。私は誰ですか
2。私はどんな騎手を持っていますか
私はこれに答えました
騎手は私の地元の変数です
このシーン
通常の関数
1。厳密なモード:未定義
2。非ストリクトモード:グローバルオブジェクト
3.Node:グローバル
4。ブラウザ:ウィンドウ
コンストラクター:オブジェクトのインスタンス
オブジェクトメソッド:オブジェクト自体
電話して応募してください
1.fn.call(context、arg1、arg2、…、argn)
2.fn.apply(コンテキスト、args)
function isNumber(obj){return object.prototype.tostring.call(obj)=== '[object number]';}function.prototype.bind
BIND新しい関数を返し、関数の範囲はBINDパラメーターです
function fn(){this.i = 0; setInterval(function(){console.log(this.i ++);}。bind(this)、500)} fn(); ()=> {}矢印関数はES6によって提供される新機能であり、字句範囲とこの値を備えた機能式式であり、
function fn(){this.i = 0; setinterval(()=> {console.log(this.i ++);}、500)} fn();継承
JavaScriptシナリオでは、継承には2つの目標があり、サブクラスには親クラスを取得する必要があります。
1。オブジェクトプロパティ
2。オブジェクトメソッド
function enternits(子、親){var _proptotype = object.create(parent.prototype); _ proptotype.constructor = child.prototype.constructor; child.proptotype = _proptotype;} function people(name、age){this.name = name = eage = age.people()people()people()people()people( this.name;} function English(name、age、language){people.call(this、name、age); this.language = language;}継承(英語、people); englight.prototype.introduce = function(){console.log( 'hi、i am' + this.getname(); {people.call(this、name、age); this.language = language;}継承(中国語、people);中国語.prototype.introduce = function(){console.log( 'hello、i am' + this.getName();中国語(「サラダオイル」、27、「中国語」); en.introduce(); cn.introduce();ES6クラスと継承
"strict"; class people {constructor(name、age){this.name = name; this.age = age;} getname(){return this.name;}} class English {constructor(name、age); this.language = language;}紹介this.getname()); console.log( 'i speak' + this.language);}} let en = new English( 'byron'、26、 'english'); en.introduce();文法
ラベルステートメント
ループ:
for(var i = 0; i <10; i ++){for(var j = 0; j <5; j ++){console.log(j); if(j === 1){break loop;}}} console.log(i);声明と表現
var x = {a:1}; {a:1} {a:1、b:2}すぐに関数を実行します
(function(){}());(function(){})(); [function(){}()]; 〜function(){}();! function(){}();+ function(){}(); - function(){}(); delete function(){}(); typeof function(){}(); void function(){}(); new function(){}(); new function(){}(); function(){}(); 1> function(){}();高度な機能
高次関数は、関数をパラメーターとして扱う関数または関数としての値を返す関数です。
コールバック関数
[1、2、3、4]。
閉鎖
閉鎖は2つの部分で構成されています
1。関数
2。環境:関数作成時の範囲内のローカル変数
function makecounter(init){var init = init || 0; return function(){return ++ init;}} var counter = makecounter(10); console.log(counter()); console.log(counter()); console.log(counter());典型的なエラー
for(var i = 0; i <doms.length; i ++){doms.eq(i)。 {console.log(i);});})(i);}怠zyな機能
function eventBindergenerator(){if(window.addeventlistener){return function(element、type、handler){element.addeventlistener(type、hanlder、false);}} else {return function(element、type、handler){element.attachevent( ' + bind(' + adder.bind(bing、var.event); eventBinderGenerator();カレー
部分パラメーターを使用して関数を生成する方法
function isType(type){return function(obj){return object.prototype.tostring.call(obj)=== '[object' + type + ']';}} var istype( 'number'); console.log(isNumber(1)); log(isNumber( 's')); ISTYPE( 'Array'); console.log(isarray(1)); console.log(isarray([1、2、3]));関数f(n){return n * n;}関数g(n){return n * 2;} console.log(f(g(5))); function pipe(f、g){return function(){return f.call(null、g.apply(null、arguments));}} var fn = pipe(f、console.log(f);尾の再帰
1.テールコールとは、関数の最後のステップが別の関数を呼び出すことであることを意味します
2。再帰と呼ばれる関数は、それ自体を呼び出します
3。尾がそれ自体を呼び出す場合、それは尾の再帰と呼ばれます
再帰は「オーバーフローをスタック」する傾向があります(スタックオーバーフロー)
関数係数(n){if(n === 1)return 1; return n *因子(n -1);}要因(5)// 120しかし、テール再帰の場合、コールレコードは1つしかないため、「スタックオーバーフロー」エラーは発生しません
関数係数(n、合計){if(n === 1)return total; return factorial(n -1、n *合計);}要因(5、1)// 120カレーはパラメーターを減らします
関数カレー(fn、n){return function(m){return fn.call(this、m、n);};} function tailfactorial(n、total){if(n === 1)retury total(n -1、n * total);} const factorial = currying(tailfactorial、1);抗ウリゼーション
function.prototype.uncurry = function(){return this.call.bind(this);};一般化を押します
var push = array.prototype.push.uncurry(); var arr = []; push(arr、1); push(arr、2); push(arr、3); console.log(arr);
上記のコンテンツは、編集者が紹介したJavaScript言語(コンパイル)の絶妙な古典的な例の完全な説明です。私はそれが誰にでも役立つことを願っています!