基本包裝類型
每當讀取一個基本類型值的時候狭姨,后臺就會創(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è)計