摘要:是一個表示無的對象,轉為數值時為。支持第一個非空字符為小數點,如返回。注意,函數前不能使用命令,否則會報錯。由于每一個值都是不相等的,這意味著值可以作為標識符,用于對象的屬性名,就能保證不會出現同名的屬性。
ECMAScript 中有6 種原始類型:Boolean、Null、Undefined、Number、String、Symbol (ECMAScript 6 新定義) 以及復雜的數據類型 Object
undefined 和 null 的簡單介紹
在使用 var 聲明變量但未對其加以初始化時,這個變量的值就是 undefined, undefined是一個表示"無"的原始值,轉為數值時為NaN;
從邏輯角度來看,null 值表示一個空對象指針,而這也正是使用 typeof 操作符檢測 null 值時會返回"object"的原因。null是一個表示"無"的對象,轉為數值時為0。
undefined 不是 JavaScript 的保留字,只是全局變量上的一個屬性,屬性值是原始值 undefined。在 ECMAScript 5 之前,給 window.undefined 賦值會覆蓋該屬性。ECMAScript 5 的標準里加入了變量擁有可寫、可枚舉、可配置屬性。全局的 undefined 的可寫屬性應該是 false 的。
Object.getOwnPropertyDescriptor(window, "undefined"); => Object {value: undefined, writable: false, enumerable: false, configurable: false}
void 運算符 對給定的表達式進行求值,然后返回 undefined,所以void 0 代替 undefined。
如果需要判斷變量是否未初始化:
typeof v === "undefined";
v === void 0;
string類型
ECMAScript中的字符串是不可變的,也就是說,字符串一旦創建,它們的值就不能改變。要改變某個變量保存的字符串,首先要銷毀原來的字符串(此過程是在后臺發生的),然后再用另一個包含新值的字符串填充該變量。
字符串還提供許多可以調用的方法:
var s = "hello, world" //定義一個字符串 s.charAt(0) // => "h" 第一個字符 s.charAt(s.length-1) // => "d" 最后一個字符 s.substring(1, 4) // => "ell" 第2-4個字符 s.slice(1,4) // => "ell" 同上 s.slice(-3) // => "rld": 最后三個字符 s.indexOf("l") // => 2 字符l首次出現的位置 s.lastIndexOf("l") // => 10: 字符l最后一次出現的位置 s.indexOf("l", 3) // => 在位置3及之后首次出現字符l的位置 s.split(",") // => ["hello", "world"]分割成子串 s.replace("h", "H") // => "Hello, world": 全文字符替換 s.toUpperCase() // => "HELLO WORLD"
number 類型
在JavaScript的內部采用IEEE754格式來表示數字,所以不區分整數和浮點數,都是用64位浮點數的形式儲存。就是說,在JavaScript內部,就根本沒有小數。但是有些運算必須得需要整數完成,所以JavaScript有時會把64位的浮點數轉換成32位的整數,再進行運算。
js中數值轉換的函數有三個:parseInt()、parseFloat()、number()
parseInt ( cString )從字符串cString非空字符開始轉換得到的整數,遇到小數點或其他0-9外的字符就停止,如“-1234a”,“-1234.0”都將返回 -1234;如果除第一個符號外一個0-9字符都不是,將返回NaN,如“-a”、“abc”等;
Number( cString )從字符串cString轉換得到的數字,包括Int和Float類型,如:“-123”返回-123,“123”和“00123”都返回 123,“234。56”返回234。56等。cString必須是合法的數字串,否則返回NaN;如“.123”、“1.23.45”、 “--123”、“123a"都返回NaN.
總之Number( )更象parseFloat( ),Number對參數更挑剔,稍有不是數字就返回NaN。
parseFloat支持第一個非空字符為小數點,如parseFloat(".123" )返回0.123。而Number(".123" )返回NaN。
空字符串或完全空格串健壯的parseFloat()返回NaN,而Number()返回0,這有點讓人費解。
除了不支持無前導0小數 (如.123、-.123)和支持多余的前導0(如-00123返回-123)多少不符合常規外,Number能用來驗證數字串!
Number類型原型上還有一些方法來對數字進度進行取舍,這些方法可以被 Number 實例對象調用:
方法 描述
toExponential() 返回一個數字的指數形式的字符串
toFixed() 返回指定小數位數的表示形式
toPrecision() 返回一個指定精度的數字
Math.abs(x) 返回x的絕對值
Math.sign(x) 返回x的符號函數, 判定x是正數,負數還是0
Math.random() 返回0到1之間的偽隨機數
Math.floor(x) 返回x向上取整后的值
Math.ceil(x) 返回x向上取整后的值
Math.round(x) 返回四舍五入后的整數.
symbol類型
Symbol值通過Symbol函數生成。這就是說,對象的屬性名現在可以有兩種類型,一種是原來就有的字符串,另一種就是新增的Symbol類型。凡是屬性名屬于Symbol類型,就都是獨一無二的,可以保證不會與其他屬性名產生沖突。
1、注意,Symbol函數前不能使用new命令,否則會報錯。這是因為生成的Symbol是一個原始類型的值,不是對象。也就是說,由于Symbol值不是對象,所以不能添加屬性。基本上,它是一種類似于字符串的數據類型。
2、Symbol函數可以接受一個字符串作為參數,表示對Symbol實例的描述,主要是為了在控制臺顯示,或者轉為字符串時,比較容易區分。
3、由于每一個Symbol值都是不相等的,這意味著Symbol值可以作為標識符,用于對象的屬性名,就能保證不會出現同名的屬性。這對于一個對象由多個模塊構成的情況非常有用,能防止某一個鍵被不小心改寫或覆蓋。Symbol值作為對象屬性名時,不能用點運算符。在對象的內部,使用Symbol值定義屬性時,Symbol值必須放在方括號之中。
let obj = (function () { let key = Symbol("你好"); let obj = { }; obj[key] = "私有變量"; return { get foo () { return this[key]; } }; })(); obj.foo = "hello world"; console.log(Object.getOwnPropertyNames(obj)); // ["foo"] console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(你好)] let anotherKey = Symbol("你好"); console.log(obj[anotherKey]) // undefined typeof anotherKey // "symbol"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96732.html
摘要:對象有狀態對象具有狀態,同一對象可能處于不同狀態之下。中對象獨有的特色對象具有高度的動態性,這是因為賦予了使用者在運行時為對象添改狀態和行為的能力。小結由于的對象設計跟目前主流基于類的面向對象差異非常大,導致有不是面向對象這樣的說法。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些...
摘要:對象有狀態對象具有狀態,同一對象可能處于不同狀態之下。中對象獨有的特色對象具有高度的動態性,這是因為賦予了使用者在運行時為對象添改狀態和行為的能力。小結由于的對象設計跟目前主流基于類的面向對象差異非常大,導致有不是面向對象這樣的說法。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些...
摘要:對象有狀態對象具有狀態,同一對象可能處于不同狀態之下。中對象獨有的特色對象具有高度的動態性,這是因為賦予了使用者在運行時為對象添改狀態和行為的能力。小結由于的對象設計跟目前主流基于類的面向對象差異非常大,導致有不是面向對象這樣的說法。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些...
摘要:基本的學習思路是跟著框架設計這本書,甚至可以說是這本書的讀書筆記。也參考很多網上解讀的博客和學習資料。當然,最重要的資料還是框架的源代碼。后來由于開發者反對,新興的框架都在命名空間上構建。 JavaScript框架學習筆記(一) 我為什么要學習框架 更深入的理解工具,以后用起來更順手而且也能做一定的工具取舍,學習理解新工具也就更快, 對提升js水平也很有幫助,框架有很多解決坑的經典思...
摘要:廖雪峰老師的教程學習筆記錯誤處理提供了像一樣的錯誤處理機制,即例如其中不是必須的,也不是必須的,但二者必須有其一,其中是必定會被執行的。其中其中函數將在超時后執行。 廖雪峰老師的javascript教程學習筆記 1. 錯誤處理 JavaScript 提供了像Java一樣的錯誤處理機制,即try catch finally.例如: try{ var s = null; s...
閱讀 2265·2021-09-27 13:35
閱讀 561·2019-08-30 15:55
閱讀 810·2019-08-30 15:53
閱讀 555·2019-08-30 15:52
閱讀 2146·2019-08-30 12:59
閱讀 2269·2019-08-29 16:42
閱讀 1385·2019-08-26 18:26
閱讀 2467·2019-08-26 13:48