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