摘要:函數類型檢測是的子類型,其屬性為參數個數,但是判斷結果有內建函數原生函數常見的有,可能被當作構造函數來使用,創建出來的是封裝了的基本類型值。構造函數可以不帶關鍵字。建議使用和來進行顯示強制轉換。
前言
此篇小結來源與《你不知道的JavaScript》和《JavaScript高級程序設計》的結合??或許是的,龜速總結中...
七種內置類型null
undefined
boolean
number
string
object
symbol
除了object,其他都成為基本類型。
變量沒有類型,值才有。
typeof總返回一個字符串。
類型檢測
因為typeof檢測null的結果為object,所以在判斷的時候需要這樣判斷:
var a = null; (!a && typeof null === "object"); //trueundefined
類型檢測
typeof undefined === "undefined"; //true
變量未持有值是undefined,但并不是未聲明,不過下面結果都是undefined:
var a; typeof a; //"undefined" typeof b; //"undefined"
安全防范
防止出現直接拋出未聲明的錯誤,不能直接用if(變量)的方法來判斷變量是不是存在,可以用以下兩種方法:
if(typeof DEGUB !== "undefined") {} if(window.DEBUG) {}boolean
類型檢測
typeof true === "boolean"; //truenumber
類型檢測
typeof 42 === "number"; //true
JS并沒有真正意義上的整數,使用雙精度格式(64位),42.0等同于42。
數字表示
默認十進制表示,小數最后的0被省略。
特別大和特別小的用指數顯示,與用toExponential()結果相同。
數字前面的0可省略。
小數點后小數最后的0也可以省略。
調用Number.prototype的方法:toFixed()顯示小數位數。
調用Number.prototype的方法:toPrecision()指定有效數位的顯示位數。
注意:運算符會優先認為是有效數字字符
42.toFixed(3); //SynataxError (42).toFiex(3); //42.000 0.42.toFixed(3); //0.420 42..toFixed(3); //0.420 42 .toFixed(3); //42.000string
類型檢測
typeof "42" === "string"; //true
字符串和字符串數組
都是類數組,有length屬性,有indexOf()和concat()方法。
字符串不可變(創建返回新值),數組可變,但a[i]在老版本IE中不允許,正確用a.CharAt(i)。
字符串可以借用方法處理,如:Arrray.prototype.join.call(a,"-");
數組有reverse()方法,字符串沒有。可以用以下方法(對復雜字符如Unicode、星號不適用):
var c=a.split().reverse().join("");object
typeof返回object對象都包含一個內部屬性[[Class]],但這個屬性無法直接訪問,
可以通過Object.prototype.toString.call()查看
Object.prototype.toString.call([1,2,3]); // "[object Array]"
Tips:若是基本類型值,null和undefined
Object.prototype.toString.call(null); // "[object Null]" Object.prototype.toString.call(undefined); // "[object Undefined]"
而其他的基本類型,會被包裝為相應的封裝對象。
函數類型檢測
function是object的子類型,其length屬性為參數個數,但是typeof判斷結果有function:
type of function a(){} === "function"; //true
內建函數/原生函數:
常見的有String()、Number()、Boolean()、Array()、Object()、Function()、RegExp()、Date()、Error()、Symbol(),可能被當作構造函數來使用,創建出來的是封裝了的基本類型值。
Tips:
typeof返回的是對象類型的子類型。
萬不得已,不使用Object()、Function()、RegExp()。
Date.now()獲取當前時間戳,在ES5之前是Date.getTime()。
ES5開始,使用Object.create(null)創建的對象[[Prototype]]屬性為null,且沒有valueOf()和toString()方法。
類型檢測
數組也是object的子類型
type of [1,2,3] === "object"; //true
類數組轉換
1.slice()常用于把類數組轉換為數組:
Array.prototype.slice.call(arguments);
2.ES6中的Array.from(arguments)實現相同作用。
Array(...)
Array(...)構造函數可以不帶new關鍵字。
若只有一個參數,參數會被作為數組的預設長度(只是length變化了)。而且在不同瀏覽器中顯示的結果也有點差異。map()遍歷會失敗,而join()會成功,它假定數組不為空,然后通過length來遍歷。
var a = Array.apply(null,{length: 3}); a; // [undefined,undefined,undefined]
可以這樣代替創建。
注意點
delete可以把元素刪除,但length并不會發生變化。
可以用Object()還能輸自行封裝。
拆封對象可以用valueOf()函數。
符號是具有唯一性的特殊值,用它來命名對象屬性不容易導致重名,但控制臺無法直接訪問它的值。
類型檢測
typeof Symbol() === "symbol"; //true
定義
ES6z中一些預定義符號,以Symbol靜態屬性形式出現,如Symbol.create、Symbol.iterator等。
obj[Symbol.iterator] = function(){/*...*/}
定義時候不能帶new關鍵字。
通過Object.getOwnPropertySymbols()可以獲得。
JS的強制轉換總返回標量基本類型值。
類型轉換發生在靜態語言的編譯階段,強制轉換發生在動態類語言運行時。
基本類型字符串轉化規則:
null -> null、undefined -> undefined
數字遵循通用規則,包括極小、極大、以及指數形式。
普通對象轉化規則:
除非自行定義,否則返回內部屬性[[Class]]值。
JSON字符串化
JSON.stringify(...)
不安全的JSON值,如undefined、function、symbol和包含循環引用的都無法處理。
在對象里遇到undefined、function和symbol會自動忽略,在數組中返回null(保證位置不變)。
true -> 1
false -> 0
undefined -> NaN
null -> 0
處理失敗返回NaN,對0開頭的十六進制數不按十六進制處理,按十進制。
對于對象,會先轉換為相應基本類型,再操作,先檢查valueOf()再用toString(),若都不返回基本類型值,產生TypeError錯誤。
~返回2的補碼,大致等同于-(x+1)。
var a = "Hello World"; if(~a.indexOf("lo")){ //...}
~~來截除字符串,只適用于32位數字,對負數的處理也不太一樣。X|0也可以。
Number()、parseInt()Number不允許解析字符串有非數字字符。
parseInt()的第一個字符是x或者X,轉換為十六進制數字。0則轉換為八進制數字。
建議使用Boolean(a)和!!a來進行顯示強制轉換。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107471.html
摘要:探討判斷橫豎屏的最佳實現前端掘金在移動端,判斷橫豎屏的場景并不少見,比如根據橫豎屏以不同的樣式來適配,抑或是提醒用戶切換為豎屏以保持良好的用戶體驗。 探討判斷橫豎屏的最佳實現 - 前端 - 掘金在移動端,判斷橫豎屏的場景并不少見,比如根據橫豎屏以不同的樣式來適配,抑或是提醒用戶切換為豎屏以保持良好的用戶體驗。 判斷橫豎屏的實現方法多種多樣,本文就此來探討下目前有哪些實現方法以及其中的優...
摘要:第條盡量少使用全局對象避免聲明全局變量盡量聲明局部變量避免對全局變量增加屬性第條始終聲明局部變量第條避免使用語句第條熟練使用閉包的函數值包含了比調用他們時執行所需要的代碼還要更多的信息。那些在其所涵蓋的作用域內跟蹤變量的函數稱為閉包。 書還沒看完。一遍看,一遍寫讀書筆記。 這本書的序是JavaScript之父Brendan Eich寫的,作者是JavaScript標準化委員會專家。可想...
摘要:如果為假值,不傳或者傳入,函數都會返回但是,傳入這個值是完全有可能的,所以這種判斷形勢是不正確的或者使用來判斷也可以原始類型優于封裝類型對象擁有六個原始值基本類型布爾值,數字,字符串,,和對象。 作為一個前端新人,多讀書讀好書,夯實基礎是十分重要的,正如蓋樓房一樣,底層穩固了,才能越壘越高。從開始學習到現在,基礎的讀了紅寶書《JavaScript高級程序設計》,犀牛書《JavaScri...
摘要:有種內置類型,分別是除對象之外,其他統稱為基本類型。另一個需要注意的是數組確切地說,數組也是的一個子類型我們可以通過下面的方法檢查變量是不是數組處理未聲明的變量時,會返回這是因為有一個特殊的安全防范機制。 js有7種內置類型,分別是undefined null boolean string number symbol object除對象之 Object 外,其他統稱為基本類型。符號 ...
摘要:為了每個對象都能通過來檢測,需要以或者的形式來調用,傳遞要檢查的對象作為第一個參數,稱為。對象都是動態的,這就意味著每次訪問對象,都會運行一次查詢。是語言中立的用于訪問和操作和文檔。 一、第三章 基本概念: 1.理解參數 1.1 可以向函數中傳遞任意數量的參數,并且可以通過arguments對象來訪問這些參數。 1.2 arguments對象只是類似數組,它通過length來確定傳進來...
閱讀 3060·2023-04-26 00:40
閱讀 2398·2021-09-27 13:47
閱讀 4239·2021-09-07 10:22
閱讀 2969·2021-09-06 15:02
閱讀 3313·2021-09-04 16:45
閱讀 2498·2021-08-11 10:23
閱讀 3602·2021-07-26 23:38
閱讀 2904·2019-08-30 15:54