javascript基礎--變量

變量

最小全局變量

每一個JavaScript環境有一個全局對象,瀏覽器中就是window對象,Node環境中是global對象,在函數外面,this指向window對象,無論是經過var 聲明或者直接建立的變量,都是這個全局對象的屬性。在函數內部經過var聲明的變量只會成爲一個函數內部局部變量,直接建立的對象仍是會成爲全局對象的屬性。瀏覽器

this指向調用改函數的對象
var  myglobal = "hello"; // 不推薦寫法
console.log(this);  // window
console.log(myglobal);  // "hello"
console.log(window.myglobal);  // "hello"
console.log(window["myglobal"]);  // "hello"
console.log(this.myglobal);  // "hello"
(function (){
var mylocal= 'world';
           myglobal1 = "!!";
console.log(this);   //window
console.log(mylocal);    //"world"
console.log(window.mylocal);  //undefined
           console.log(this.indow.mylocal);  //undefined
console.log(window.myglobal1);   //"!!"
console.log(myglobal1);   //"!!"
}());

須要注意的地方
建立隱式全局變量 var a = b = 0; 賦值運算從右到左,在此狀況下比如var a = (b = 0),b是未聲明的。函數

var的反作用
經過var 聲明的變量不能delete。
JavaScript中,你能夠在函數的任何位置聲明多個var語句,而且它們就好像是在函數頂部聲明同樣(變量提高)發揮做用。須要注意的是ES6中經過let和const聲明的變量是不存在變量提高狀況的。測試

// 例子
myname = "global"; // 全局變量
function func() {
  alert(myname); // "undefined"
  var myname = "local";
  alert(myname); // "local"
}
func();
myname = "global"; // global variable
function func() {
 var myname; // 等同於 -> var myname = undefined;
 alert(myname); // "undefined"
 myname = "local";
 alert(myname); // "local"}
func();

代碼處理分兩個階段,第一階段是變量,函數聲明,以及正常格式的參數建立,這是一個解析和進入上下文的階段。第二個階段是代碼執行,函數表達式和不合格的標識符(爲聲明的變量)被建立。變量,函數的聲明永遠在代碼處理的第一步,與代碼編寫位置無關。this

定義變量
ECMAScript變量是鬆散類型的,能夠保存任何類型的數據。spa

var message = "hello" ;
   message = 100;    //有效,不推薦

經過var定義局部變量;忽略var會定義全局變量,做爲window的屬性;
使用未定義的變量,會報錯,xxx is not defined,對於未定義的變量,只能使用typeof操做符,返回"undefined"。指針

var message;
等同於
var message = undefined;
非
var message = 'undefined';

數據類型

  • 5種簡單數據類型
    Undefined, Null, Boolean, Number, Stringcode

  • 複雜數據類型
    Object對象

  • Null 類型
    null值表示一個空對象指針,若是定義的變量準備在未來用於保存對象,那麼最好將該變量初始化爲null而不是其餘值。這樣只要檢查變量的值是否爲null,就能夠判斷變量是否判斷一個對象的引用。blog

    console.log( null == undefined);   // true
    console.log( null === undefined);  // false
    obj !=null 能夠判斷對象是否爲null 或者 爲undefined
    var obj;
    console.log(obj != null)             //false
    console.log(obj != undefined)        //false

    使用typeof操做符返回字符串圖片

    "undefined" 變量未定義或者聲明定義後未賦值。除了typeof操做符,操做未定義的變量會報錯
    "boolean" 變量的值是布爾值
    "string" 變量的值是字符串
    "number" 變量的值是數值
    "object" 變量的值是對象或null
    "function" 變量的值是函數

數據類型轉換

隱式類型轉換
圖片描述
Number 類型
若是小數點後面沒有跟任何數字,或者浮點數值自己就是一個整數,那麼該浮點數會被轉換爲整數。保存浮點數所需的內存空間是整數的兩倍,若是可能,ECMAScript會不失時機地將浮點數轉化爲整數。

var floatNum1 = 1.;   // 解析爲1
var floatNum2 = 10.0;  // 解析爲10

基於IEEE754數值的浮點計算會產生舍入偏差,不要測試某個特定的浮點數值。
console.log(0.1 + 0.2 == 0.3); // false

非數值轉換爲數值

  • Number();

  • parseInt(); 指定基數

  • parseFloat(); 只解析十進制值,沒有第二個參數指定基數

  • +;

    console.log(+'5');     //5
       console.log(+'5.5');  //5.5
       console.log(+'5w');  //NaN
       console.log(+'ww');  //NaN
       console.log(parseInt('5',10));  // 5
       console.log(parseInt('5.5',10));  //5
       console.log(parseInt('5w',10));  //5
       console.log(parseInt('ww',10));  //NaN
       var month = "06",
         year = "09";
       console.log(parseInt(month));    //6
       console.log(parseInt(month, 10));  //6
       console.log(parseInt(year));   //0
       console.log(parseInt(year, 10));  //9

    parseInt()能夠從字符串中獲取數值。當字符串以」0″開頭的時候就有可能會出問題,開頭爲」0″的字符串會被當作8進制處理。爲了不矛盾和意外的結果,老是指定基數(radix)參數---第二個參數。

    +"08" // 結果是 8
    +"08netease"  //NaN
    Number("08") // 8
    Number("08netease") //NaN
    parseInt("08netease", 10) //8   parseInt(arg0, arg1)較慢
相關文章
相關標籤/搜索