1. 程式人生 > >javascript學習指南——先導片

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)。