国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript常用基礎知識強化學習

2019-11-20 11:03:20
字體:
來源:轉載
供稿:網友

首先,還是用比較官方的文字描述來解釋下JavaScript:

JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基于原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能。
JavaScript擁有以下幾個特點:

  • ? 腳本語言。JavaScript是一種解釋型的腳本語言,C、C++等語言先編譯后執行,而JavaScript是在程序的運行過程中逐行進行解釋。
  • ? 基于對象。JavaScript是一種基于對象的腳本語言,它不僅可以創建對象,也能使用現有的對象。
  • ? 簡單。JavaScript語言中采用的是弱類型的變量類型,對使用的數據類型未做出嚴格的要求,是基于Java基本語句和控制的腳本語言,其設計簡單緊湊。
  • ? 動態性。JavaScript是一種采用事件驅動的腳本語言,它不需要經過Web服務器就可以對用戶的輸入做出響應。在訪問一個網頁時,鼠標在網頁中進行鼠標點擊或上下移、窗口移動等操作JavaScript都可直接對這些事件給出相應的響應。
  • ? 跨平臺性。JavaScript腳本語言不依賴于操作系統,僅需要瀏覽器的支持。因此一個JavaScript腳本在編寫后可以帶到任意機器上使用,前提上機器上的瀏覽器支 持JavaScript腳本語言,目前JavaScript已被大多數的瀏覽器所支持。

JavaScript由以下部分組成:

  • ? ECMAScript,描述了該語言的語法和基本對象。
  • ? 文檔對象模型(DOM),描述處理網頁內容的方法和接口。
  • ? 瀏覽器對象模型(BOM),描述與瀏覽器進行交互的方法和接口。

JavaScript都有哪些數據類型?

  • ? object object中又有 Function、String、Array、Object、Date等等
  • ? string
  • ? number
  • ? boolean
  • ? null
  • ? undefined

下面部分代碼來證明下以上所說:
String、Number是對象,string、number是不同的數據格式...

 var str = "abc"; var Str = new String("abc"); var num = 100; var Num = new Number(100); console.log(typeof str, typeof Str, typeof num, typeof Num); // string object number object

對象原型鏈是個啥?
當我們用new一個對象 (使用構造函數創建) 或者用Object.create創建對象時,那么這個對象將會有原型和原型鏈。
比如:我們創建個構造函數_obj,然后通過_obj來new一個obj,那么這時的原型鏈就是:obj → _obj → Object.prototype → null。
讓我們通過代碼來說明吧:

 function _obj(){}; _obj.prototype.name = "野獸"; //每個函數都包含一個prototype屬性,這個屬性指向一個對象的引用,這個對象就是“原型對象”。 _obj.prototype.age = 21; _obj.prototype.sayHello = function(){   console.log("Hello "+this.name); }; var obj = new _obj(); console.log(obj); //_obj{} 而其的__proto__里包含了_obj里的各個屬性,包括name,age,sayHello  console.log(obj.__proto__ == _obj.prototype); //true obj.sayHello(); // Hello 野獸 console.log(Object.prototype.__proto__); // null 當我們追究到Object(也就是object的源頭時)其指向的是null

值的注意的是:Object.create(null)的原型鏈直接為null,也就是說人家的原型鏈短的很呢...

JavaScript中作用域怎么玩?
當我們在JavaScript中使用var聲明一個變量,其實就是在該作用域所指向的對象添加一個屬性及屬性值。
在JavaScript中不存在塊級作用域,在當前作用域內聲明的變量也只有在當前作用域及當前作用域內的函數內可用,而在函數內聲明的變量只適用于該函數內(如果不做操作),在函數外部調用該變量將會報錯not defined。
讓我們跑一跑代碼來認識下作用域:

 var firstNum = 1; ~function(){   var secondNum = 2;   console.log("在里面打印:"+firstNum ,secondNum); // 在里面打印:1 2 }(); console.log("在外面打印:"+firstNum ,secondNum); // Uncaught ReferenceError: secondNum is not defined(…)

作用域也有作用域鏈:

 var firstNum = 1; console.log("在最外層打印:"+firstNum); // 在最外層打印:1 ~function(){   var secondNum = 2;   console.log("在中間層打印:"+firstNum,secondNum); // 在中間層打印:1 2   ~function(){     var thirdNum = 3;     console.log("在最里層打印:"+firstNum,secondNum,thirdNum); // 在最里層打印:1 2 3   }();   console.log("在中間層打印:"+firstNum,secondNum,thirdNum); // Uncaught ReferenceError: thirdNum is not defined(…) }(); console,log("在最外層打印:"+firstNum,secondNum,thirdNum); // 由于上面已經報錯,而瀏覽器執行JavaScript又是單線程的,所以壓根沒執行到這句...

也就是說,在當前作用域聲明的變量將會在其子...子子子作用域還是一直能用,爽歪歪吧,哈哈...

閉包是什么?怎么玩?
函數的執行依賴于變量作用域,這個作用域是在函數定義時決定的,而不是函數調用時決定的。為了實現這種詞法作用域,JavaScript函數對象的內部狀態不僅包含函數的邏輯代碼,還必須引用當前的作用域鏈。函數對象可以通過作用域鏈相互關聯起來,函數體內部的變量都可以保存在函數的作用域內,這種特性其實就是“閉包”。
繼續來看代碼吧:

 function counter(){  var num = 0;  return {   count : function(){ return num++; },   reset : function(){ return num = 0; }  } }; var firstNum = counter(); var secondNum = counter(); console.log(firstNum.count()); // 0 console.log(secondNum.count()); // 0 firstNum.reset(); console.log(firstNum.count()); // 0 num已被重置,所以返回的為0 console.log(secondNum.count()); // 1 num未被重置,所以返回的是1 console.log(firstNum,secondNum); // 都為 Object{ count:function(),reset:function(),__proto__} 并且并不能在其中找到counter里var的n,這也實現了函數里的私有變量,只將需要暴露的兩個方法給暴露在外。

閉包用的多的兩個作用:讀取函數內部的變量值;讓這些變量值始終保存著(在內存中)。
同時需要注意的是:閉包慎用,不濫用,不亂用,由于函數內部的變量都被保存在內存中,會導致內存消耗大。

JavaScript中的this
在JavaScript中,this通常指向的是我們正在執行的函數本身,或者是,指向該函數所屬的對象。
全局的this → 指向的是Window
函數中的this → 指向的是函數所在的對象
對象中的this → 指向其本身
驗證代碼:

 console.log(this); // Window {external: Object, chrome: Object, document: document, global: Window, cr: Object…} 全局下執行console.log,所以此處指向的是Window ~function seeThis(){  console.log(this); // Window {external: Object, chrome: Object, document: document, global: Window, cr: Object…} 由于我是在全局下寫的這個函數,所以此處指向的還是Window }(); var obj = {  name:"野獸",  showThis:function(){   console.log(this); // Object {name: "野獸",showThis:function(),__proto__} 此處打印的是對象本身  } }; obj.showThis();

arguments
在Javascript函數體內,arguments像數組一樣(并不是真的數組),有length屬性,可以代表傳給函數的參數的個數。
簡單來說,arguments函數執行時所傳的實際參數。
比如:arguments[0]表示傳入第一個參數。
用代碼驗證:

 function argumentsTest(){  console.log(arguments[0]?arguments[0]:"Hello World",arguments[1]?arguments[1]:"你好 世界") }; argumentsTest(); // Hello World 你好 世界 argumentsTest("This is firstValue => arguments[0].","This is secondValue => arguments[1]."); // This is firstValue => arguments[0]. This is secondValue => arguments[1].

暫時就為大家分享這些JavaScript常用基礎知識,希望對大家進一步學習掌握javascript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 元江| 大悟县| 阳山县| 曲靖市| 达州市| 全椒县| 老河口市| 彭泽县| 梁山县| 合阳县| 瑞昌市| 定西市| 陵川县| 韶关市| 肃宁县| 湛江市| 额敏县| 百色市| 布拖县| 德清县| 大洼县| 芷江| 景德镇市| 电白县| 布拖县| 葫芦岛市| 五河县| 郴州市| 海林市| 陕西省| 华宁县| 紫金县| 肃北| 那曲县| 舞阳县| 江西省| 昌吉市| 宿松县| 子洲县| 巫溪县| 鹤峰县|