第五章(5):基本包裝類型和單體內(nèi)置對象

基本包裝類型

每當讀取一個基本類型值的時候狭姨,后臺就會創(chuàng)建一個與之對應(yīng)的基本包裝類型。基本包裝類型顧名思義就是對基本類型的一層包裝苏遥,成為一個特殊的引用類型送挑。然后具備一些方法和屬性。方便其使用暖眼。

/**
 * 1和2的操作類似,實際在1執(zhí)行的時候默認執(zhí)行的是2的操作
 *
 * @type {string}
 */
// 1 基本類型
var str = 'hello'
var str1 = str.concat(', world')

// 2
var str = new String('hello')
var str1 = str.concat(', world')
str1 = null

/**
 * 基本類型和基本包裝類型的區(qū)別是:基本包裝類型在離開當前作用域之前是一直存在的纺裁,而基本類型背后默認自動創(chuàng)建的基本包裝類型的實例在執(zhí)行完之后就銷毀了
 * @type {string}
 */
var s1 = 'hello'
var s2 = new String('hello')
s1.age = 18
console.log('s1: ', s1) // s1:  hello
s2.age = 18
console.log('s2: ', s2) // s2:  String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", age: 18, length: 5, [[PrimitiveValue]]: "hello"}

/**
 * boolean基本包裝類型
 * @type {boolean}
 */
var b1 = true
var b2 = new Boolean(true)
console.log(typeof b1)  // boolean
console.log(typeof b2)  // object

/**
 * Number基本包裝類型
 * toFixed 可以接受一個參數(shù)诫肠,代表要保留的小數(shù)位司澎,能夠自動四舍五入。
 * @type {number}
 */
var n1 = 12346.678
console.log(n1.toFixed(2))  // 12346.68

/**
 * String 基本包裝類型
 * @type {string}
 */
var msg = 'hello,日暮途遠'
console.log(msg.length) // 10 即使是漢字栋豫,也只占1位
console.log(msg.charAt(6))  // 日 (返回給定位置的字符)
console.log(msg.charCodeAt(6))  // 26085  (返回給定位置的字符編碼)
console.log(msg.concat('!'))  // hello,日暮途遠! (和數(shù)組的concat方法類似)

console.log(msg.slice(5,7)) // ,日 (和數(shù)組的slice方法類似)
console.log(msg.substring(5,7)) // ,日 (和slice方法類似)
console.log(msg.substr(5,7)) // ,日暮途遠 (第一位是起始位置挤安,第二位是長度)

console.log(msg.indexOf('l')) // 2  (和數(shù)組的indexOf方法類似)
console.log(msg.lastIndexOf('l')) // 3  (和數(shù)組的lastIndexOf方法類似)

var brief = ' h e l l o '
console.log(brief.trim()) // 刪除開頭和結(jié)尾的空格,對原字符沒有影響

//在之前的正則表達式章節(jié)已經(jīng)介紹過,這里就不多說了
var pattern1 = / /g
console.log(brief.match(pattern1))  // [" ", " ", " ", " ", " ", " "]
console.log(brief.replace(pattern1,""))  // hello

//可以接受一個或多少字符編碼然后轉(zhuǎn)化成字符
console.log(String.fromCharCode(97,98)) // ab

內(nèi)置對象

由ECMAScript實現(xiàn)提供的丧鸯,不依賴于宿主環(huán)境的對象蛤铜,這些對象在ECMAScript程序之前就已經(jīng)存在,例如Object,Array丛肢,String围肥。還有兩個單體內(nèi)置對象:Global和Math

  • Global
    Global對象是不存在的。但是你可以理解為它是上帝蜂怎。所有在全局環(huán)境中定義的屬性和函數(shù)穆刻,都是Global對象的屬性和方法。Global還有以下幾個方法
// Global
/**
 * encodeURI 不會對本身的特殊字符進行編碼,只會對空格和非字母(漢字)進行編碼
 * encodeURIComponent 會對所有非字母的字符進行編碼
 * @type {string}
 */
var url = 'http://www.baidu.com/index?a=1&name=日暮途遠 ——————'
var enU = encodeURI(url)  // http://www.baidu.com/index?a=1&name=%E6%97%A5%E6%9A%AE%E9%80%94%E8%BF%9C%20%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94
var enUC = encodeURIComponent(url)  // http%3A%2F%2Fwww.baidu.com%2Findex%3Fa%3D1%26name%3D%E6%97%A5%E6%9A%AE%E9%80%94%E8%BF%9C%20%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94%E2%80%94
console.log(enU)
console.log(enUC)

//解碼
console.log(decodeURI(enU)) // http://www.baidu.com/index?a=1&name=日暮途遠 ——————
console.log(decodeURIComponent(enUC)) // http://www.baidu.com/index?a=1&name=日暮途遠 ——————

/**
 * eval只接受一個參數(shù),要執(zhí)行的ECMAScript的字符串
 * @type {string}
 */
var str = 'console.log("hello, world")'
console.log(eval(str))  // hello, world
console.log(eval('hello, world')) // Uncaught ReferenceError: hello is not defined
  • Math
    Math對象保存了一些方便于數(shù)學計算的屬性和方法怀挠。
//Math
var arr = [1,2,3,4,5,6]
console.log(Math.max.apply(Math, arr))  // 6 獲取最大值
console.log(Math.min.apply(Math, arr))  // 1 獲取最小值

var num = 123.578
console.log(Math.ceil.call(Math, num))  // 124 向上取整
console.log(Math.floor.call(Math, num)) // 123 向下取整
console.log(Math.round.call(Math, num)) // 124 四舍五入
/**
 * 一個范圍內(nèi)取隨機數(shù)
 * ran = Math.floor(Math.random() * 個數(shù) + 最小數(shù))
 * @type {number}
 */
var ran = Math.floor(Math.random() * 10 + 1)
console.log(ran)  //  1 <= ran <= 10

另外還有例如sin, cos等方法贱迟,這里就不一一列舉了。

引用

javascript高級程序設(shè)計

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝙泼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诚些,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颠蕴,死亡現(xiàn)場離奇詭異泣刹,居然都是意外死亡,警方通過查閱死者的電腦和手機犀被,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門椅您,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寡键,你說我怎么就攤上這事掀泳。” “怎么了西轩?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵员舵,是天一觀的道長。 經(jīng)常有香客問我藕畔,道長马僻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任注服,我火速辦了婚禮韭邓,結(jié)果婚禮上措近,老公的妹妹穿的比我還像新娘。我一直安慰自己女淑,他們只是感情好瞭郑,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸭你,像睡著了一般屈张。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袱巨,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天阁谆,我揣著相機與錄音,去河邊找鬼瓣窄。 笑死笛厦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的俺夕。 我是一名探鬼主播裳凸,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劝贸!你這毒婦竟也來了姨谷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤映九,失蹤者是張志新(化名)和其女友劉穎梦湘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體件甥,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡捌议,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了引有。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓣颅。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖譬正,靈堂內(nèi)的尸體忽然破棺而出宫补,到底是詐尸還是另有隱情,我是刑警寧澤曾我,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布粉怕,位于F島的核電站,受9級特大地震影響抒巢,放射性物質(zhì)發(fā)生泄漏贫贝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一蛉谜、第九天 我趴在偏房一處隱蔽的房頂上張望稚晚。 院中可真熱鬧凤优,春花似錦、人聲如沸蜈彼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幸逆。三九已至,卻和暖如春暮现,著一層夾襖步出監(jiān)牢的瞬間还绘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工栖袋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拍顷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓塘幅,卻偏偏與公主長得像昔案,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子电媳,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容