摘要:變量的特點變量是松散類型的,所謂松散類型就是可以用來保存任何類型的數據。
變量的特點
js變量是松散類型的,所謂松散類型就是可以用來保存任何類型的數據。換句話說, 每個變量僅僅是一個用于保存值的占位符而已
js變量可以用來保存任何值,未經過初始化的變量,會保存一個特殊的值—undefined,如:var msg;
js變量的初始化并不會為它標記類型;初始化的過程就是給變量賦一個值那么簡單。因此,可以在修改變量值的同時修改值的類型(不推薦)
js變量的生命周期就是其所在的作用域,因此不推薦在全局內定義變量(內存泄漏)
js變量直接聲明時,會創建一個全局變量,嚴格模式下會報錯 function test(){ msg = "hi"; }
可以使用一條語句定義多個變量,只要像下面這樣把每個變量(初始化或不初始化均可)用逗號分隔開即可
var message = "hi", found = false, age = 29;變量的分類和檢測
1. 變量檢測—typeofECMAScript 中有 5 種簡單數據類型(也稱為基本數據類型):Undefined、Null、Boolean、Number 和 String。還有 1 種復雜數據類型—Object,Object 本質上是由一組無序的鍵值對組成的
typeof始終返回的是下列的某個字符串
"undefined"—如果這個值未定義;
"boolean"—如果這個值是布爾值;
"string"—如果這個值是字符串;
"number"—如果這個值是數值;
"object"—如果這個值是對象或 null;
"function"—如果這個值是函數;
注意:
特殊值null被認為是一個空的對象引用,因此typeof null === "object"
typeof會將函數類型識別為"function",雖然函數不是多帶帶的數據類型
var s = "Nicholas"; var b = true; var i = 22; var u; var n = null; var o = new Object(); var f = new Function(); alert(typeof s); //string alert(typeof i); //number alert(typeof b); //boolean alert(typeof u); //undefined alert(typeof n); //object alert(typeof o); //object alert(typeof f); //function
typeof 操作符是確定一個變量是字符串、數值、布爾值,還是 undefined 的最佳工具。如果變量的值是一個對象或 null,則 typeof 操作符會像下面例子中所示的那樣返回"object",我們依然無法確定對象的具體類型...
2. 變量檢測—instanceof語法: result = variable instanceof constructor
如果變量是給定引用類型(根據它的原型鏈來識別)的實例,那么 instanceof 操作符就會返回 true
alert(person instanceof Object); alert(colors instanceof Array); alert(pattern instanceof RegExp);
注意:
在檢測一個引用類型值和 Object 構造函數時,instanceof 操作符始終會返回 true,因為所有引用類型的值都是 Object 的實例
如果使用 instanceof 操作符檢測基本類型的值,則該操作符始終會返回 false,因為基本類型不是對象
instanceof 能夠確定引用類型的實例對象是否在某條原型鏈上,但是無法精準的判斷變量到底是什么類型,而且在面對基本類型時都會返回false...
3. 變量檢測—Obect.prototype.toString這個方法是檢測數據類型最準確的方法(在不認為更改對象原型方法toString的前提下),建議將其封裝為函數做判別
Object.prototype.toString.call(123) //"[object Number]" Object.prototype.toString.call("123") //"[object String]" Object.prototype.toString.call(undefined) //"[object Undefined]" Object.prototype.toString.call(true) //"[object Boolean]" Object.prototype.toString.call({}) //"[object Object]" Object.prototype.toString.call([]) //"[object Array]" Object.prototype.toString.call(function(){}) //"[object Function]" Object.prototype.toString.call(new Date) // "[object Date]"
函數封裝:
// 判斷是否為函數 function isFunction(fn) { return Object.prototype.toString.call(fn) === "[object Function]"; } // 判斷是否為數組 function isArray(o) { return Object.prototype.toString.call(o) === "[object Array]"; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/84707.html
摘要:具體說就是執行流進入下列任何一個語句時,作用域鏈就會得到加長語句的塊。如果局部環境中存在著同名的標識符,就不會使用位于父環境中的標識符訪問局部變量要比訪問全局變量更快,因為不用向上搜索作用域鏈。 基本類型和引用類型的值 ECMAscript變量包含 基本類型值和引用類型值 基本類型值值的是基本數據類型:Undefined, Null, Boolean, Number, String ...
摘要:瀏覽器對象模型提供了很多對象,用于訪問瀏覽器的功能,這些功能與任何網頁內容無關。對象基本上只用來表明客戶端的能力。 BOM(瀏覽器對象模型)提供了很多對象,用于訪問瀏覽器的功能,這些功能與任何網頁內容無關。 window對象 全局作用域 定義全局變量與在window對象上直接定義屬性還是有一點差別:全局變量不能通過delete操作符刪除,而直接在window對象上的定義的屬性可以。 v...
摘要:作用域鏈中的下一個變量對象來自包含外部環境,而再下一個變量對象則來自下一個包含環境。這樣,一直延續到全局執行環境全局執行環境的變量對象始終都是作用域鏈中的最后一個對象標識符解析沿作用域鏈一級一級搜索標識符。 一、寫在前面 最近研究了創建Android虛擬機、vscode結合weex開發Android APP、Vmware裝MAC虛擬機的事,看的內容不夠多,接下來加油 二、變量、作用域和...
摘要:為了每個對象都能通過來檢測,需要以或者的形式來調用,傳遞要檢查的對象作為第一個參數,稱為。對象都是動態的,這就意味著每次訪問對象,都會運行一次查詢。是語言中立的用于訪問和操作和文檔。 一、第三章 基本概念: 1.理解參數 1.1 可以向函數中傳遞任意數量的參數,并且可以通過arguments對象來訪問這些參數。 1.2 arguments對象只是類似數組,它通過length來確定傳進來...
摘要:表示沒有對象,即該處不應該有值。典型用法是作為函數的參數,表示該函數的參數不是對象。作為對象原型鏈的終點。表示缺少值,就是此處應該有一個值,但是還沒有定義。 undefined 和 null 的簡單介紹 undefined 和 null 都是簡單數據類型,且對應的我數據類型下有且僅有一個值,分別為undefined和null; 《javascript高級程序設計》書中這樣描述: 在使用...
閱讀 3034·2023-04-25 20:22
閱讀 3348·2019-08-30 11:14
閱讀 2600·2019-08-29 13:03
閱讀 3189·2019-08-26 13:47
閱讀 3231·2019-08-26 10:22
閱讀 1277·2019-08-23 18:26
閱讀 626·2019-08-23 17:16
閱讀 1922·2019-08-23 17:01