javascript學習指南——先導片

javascript學習:


- 帶有src屬性的<script>元素不應該在其<script>和</script>標籤之間再包含額外的JavaScript代碼,如果包含了嵌入的代碼,只會下載並執行外部腳本文件,嵌入的代碼會被忽略
- 標準模式和混雜模式的區分點:主要爲css方面,也會影響JavaScript
標準模式和混雜模式區別
- <noscript>元素可以指定在不支持腳本的瀏覽器中顯示的替代內容,但啓用的情況下不會顯示

  • JavaScript區分大小寫,基本數據類型有undefined,Null,Boolean,Number,String JavaScript的精度運算會出現誤差,主要是因爲採用了IEEE 754標準,轉化爲二進制後運算有位數限制,利用先轉化爲整數解決
  • 省略var後變量變爲全局變量(不贊成這樣做),用var在函數內部定義一個變量,則只在函數內部環境有效,undefined派生自null
  • isNaN()函數判斷是否是數值
  • typeof 判斷數據類型,“person instanceof object”判斷變量是否是object的實例
  • 利用parseInt()函數制定基數,如: var num=parseInt(“10”,16),parseInt()將字符串轉化成整數;
  • Number()將null轉化爲0,將undefined轉化爲NaN
  • parseFloat()只解析十進制數,如果第一個數爲非數字,會被直接解析爲NaN
  • 字符串中含有雙字節字符,length屬性不會精確地返回字符串的字符數目;
  • 轉換成字符串方法:num.toString(8)可將num轉換成8進制的數

創建Object對象保存在變量o中,實現實例化:
var o=new Object(); Object的每個實例有以下屬性和方法: constructor:保存用於創建當前對象的函數,此例中的構造函數爲Object();
hasOwnProperty():檢查對象實例是否有某屬性,屬性名以字符串形式指定;
valueOf():返回對象的字符串、數值或布爾值,即具體值,如var t=new
Date(),o.valueOf()會返回具體的時間(d的值)

一元操作符+和-對對數字不會產生影響,但對其他非數值進行操作時,會像Number()函數一樣對值進行轉換
var num1 = 25; // 二進制 00000000000000000000000000011001
var num2 = ~num1; // 二進制 11111111111111111111111111100110
alert(num2); // -26
變成負數的讀法是按位取反,末位加一(得到補碼)

左移不區分有符號和無符號,右移過程: 有符號右移(>>): 符號位不變,最高位以1填充; 無符號右移(>>>):
會把負數的二進制碼當成正數的二進制碼,導致得到的結果很大

字母和字母比較時,全部轉換成字符編碼比較;字符和數字比較時,字符轉化成數值

函數的參數在調用時不用一一對應,參數其實由一個argument的對象組成的數組,調用的時候,第一個參數可以寫爲argument[0],依此類推

  • 按位非的實質是操作數的負值-1
  • valueOf() 方法可返回 Boolean 對象的原始值,NaN不等於任何值
  • ECMAScript函數沒有重載,但可以實現類似重載效果,可以向函數傳遞任意數量的參數,函數都會執行,可通過argument對象來訪問參數,相當於其中有一個argument數組

判斷類型時使用typeof操作符,如果是對象使用instance判斷是什麼類型的對象

  • 創建object實例有兩種方法
    1.對象字面量表示法:
    var person={
    name:”nike”, //使用逗號分隔不同的屬性
    age:12 //最後一個變量,不用加逗號
    }
    2.最直接的new 操作符+Object構造函數
    var person=new Object();
    person.name=”Nicholas”;
    person.age=29;

使用 new 調用基本包裝類型的構造函數,與直接調用同名的轉型函數是不一樣的。
例如:
var value = “25”;
var number = Number(value); //轉型函數
alert(typeof number); //”number”
var obj = new Number(value); //構造函數
alert(typeof obj); //”object”


  • join方法可使用不同的分隔符重建字符串
  • js中的toString()和toLocaleString()不同地方在於後者會按本地規則進行解析,如new Date()會解析成類似2018/3/26 下午8:35:06,解析數字時會每三個隔一個逗號,像是人民幣的斷字
  • 查找數組中的某個數,從前開始往後:indexOf(),從後開始往前:lastIndexOf()
  • 取模運算只與左邊的符號有關
  • 函數聲明會覆蓋變量聲明(在僅聲明不賦值的情況下)
  • 自調用函數過程:
    (function () {
    var x = “Hello!!”; // 我將調用自己
    })();
  • element.addEventListener(event, function, useCapture);

第一個參數是事件的類型 (如 “click” 或 “mousedown”).

第二個參數是事件觸發後調用的函數。

第三個參數是個布爾值用於描述事件是冒泡還是捕獲。該參數是可選的。
利用js添加一個塊級元素:

<div id="div1">
<p id="p1">這是一個段落。</p>
<p id="p2">這是另一個段落。</p>
</div>
<script>
var para=document.createElement("p");
var node=document.createTextNode("這是一個新段落。");
para.appendChild(node);
var element=document.getElementById("div1");
element.appendChild(para);

js彈窗之確認框:

function myFunction(){
    var x;
    var r=confirm("是否選擇!");
    if (r==true){
        x="你按下了\"確定\"按鈕!";
    }
    else{
        x="你按下了\"取消\"按鈕!";
    }
    document.getElementById("demo").innerHTML=x;
}

js彈窗之提示框:

function myFunction(){
    var x;
    var person=prompt("請輸入你的名字","Harry Potter");
    if (person!=null && person!=""){
        x="你好 " + person + "! 今天感覺如何?";
        document.getElementById("demo").innerHTML=x;
    }
}

bind()方法普遍使用:

function f(y,z){
    return this.x+y+z;
}
var m=f.bind({x:1},2); 
console.log(m(3));  // 6

bind()方法會把傳入它的第一個實參綁定給f函數體內的 this,從第二個實參起,將依此傳遞給原始函數,因此 {x:1}傳遞給this ,2傳遞給形參y,m(3) 調用時的3 傳遞給形參z。

其實這個例子 f() 函數能夠處理部分參數,分步計算 ( bind() 時處理了參數x,和參數y,調用 m(3)時處理了參數z )的過程其實是一個典型的Curry過程(Currying)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章