标签:val define 返回值 计数 min 精确 取出 数位 布尔运算
包装对象
所谓“包装对象”,就是分别与数值、字符串、布尔值相对应的Number
、String
、Boolean
三个原生对象
这三个原生对象可以把原始类型的值变成(包装成)对象
var v1 = new Number(123); var v2 = new String(‘abc‘); var v3 = new Boolean(true); typeof v1 // "object" typeof v2 // "object" typeof v3 // "object" v1 === 123 // false v2 === ‘abc‘ // false v3 === true // false
Object
对象继承的方法:valueOf
和toString
new Number(123).valueOf(); // 123 new String(‘abc‘).valueOf(); // "abc" new Boolean(true).valueOf(); // true new Number(123).toString(); // "123" new String(‘abc‘).toString(); // "abc" new Boolean(true).toString(); // "true"
‘abc‘.length // 3 // abc是一个字符串,本身不是对象,不能调用length属性。 // JavaScript 引擎自动将其转为包装对象,在这个对象上调用length属性。 // 调用结束后,这个临时对象就会被销毁。 //这就叫原始类型与实例对象的自动转换
String.prototype
上定义
// 比如,我们可以新增一个double方法,使得字符串和数字翻倍 String.prototype.double = function () { return this.valueOf() + this.valueOf(); }; ‘abc‘.double(); // abcabc Number.prototype.double = function () { return this.valueOf() + this.valueOf(); }; (123).double(); // 246 123
外面必须要加上圆括号,否则后面的点运算符(.
)会被解释成小数点
Boolean 对象
false
对应的包装对象实例,布尔运算结果也是true
var b = new Boolean(true); typeof b; // "object" b.valueOf(); // true if (new Boolean(false)) { console.log(‘true‘); // true } if (new Boolean(false).valueOf()) { console.log(‘true‘); // 无输出 }
Boolean(undefined); // false Boolean(null); // false Boolean(0); // false Boolean(‘‘); // false Boolean(NaN); // false Boolean(1); // true Boolean(‘false‘); // true Boolean([]); // true Boolean({}); // true Boolean(function () {}); // true Boolean(/foo/); // true // 上面几种 true 的情况,都值得认真记住
!
)也可以将任意值转为对应的布尔值
!!undefined // false !!null // false !!0 // false !!‘‘ // false !!NaN // false !!1 // true !!‘false‘ // true !![] // true !!{} // true !!function(){} // true !!/foo/ // true
Number 对象
是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用
var n = new Number(1); typeof n // "object" Number(true); // 1
Number
对象部署的自己的toString
方法,用来将一个数值转为字符串形式// 10一定要放在括号里,这样表明后面的点表示调用对象属性。 // 如果不加括号,这个点会被 JavaScript 引擎解释成小数点,从而报错 (10).toString(); // "10" (10).toString(2); // "1010" (10).toString(8); // "12" (10).toString(16); // "a"
toString
方法
10[‘toString‘](2); // "1010"
(10).toFixed(2); // "10.00" (10.005).toFixed(2); // "10.01" 11.11111.toFixed(2); // "11.11"
参数为小数位数,有效范围为0到20,超出这个范围将抛出 RangeError 错误
(10).toExponential(); // "1e+1" (10).toExponential(1); // "1.0e+1" (10).toExponential(2); // "1.00e+1" (1234).toExponential(); // "1.234e+3" (1234).toExponential(1); // "1.2e+3" (1234).toExponential(2); // "1.23e+3"
小数点后有效数字的位数,范围为0到20,超出这个范围,会抛出一个 RangeError 错误
(12.34).toPrecision(1); // "1e+1" (12.34).toPrecision(2); // "12" (12.34).toPrecision(3); // "12.3" (12.34).toPrecision(4); // "12.34" (12.34).toPrecision(5); // "12.340"
有效数字的位数,范围是1到21,超出这个范围会抛出 RangeError 错误
(12.35).toPrecision(3); // "12.3" (12.25).toPrecision(3); // "12.3" (12.15).toPrecision(3); // "12.2" (12.45).toPrecision(3); // "12.4"
Number.prototype
对象上面可以自定义方法,被Number
的实例继承。Number
的实例对象Number.prototype.add = function (x) { return this + x; }; Number.prototype.subtract = function (x) { return this - x; }; 8[‘add‘](2); // 10 (8).add(2).subtract(4); // 6
// 在Number对象的原型上部署了iterate方法,将一个数值自动遍历创建一个数组 Number.prototype.iterate = function () { var result = []; for (var i = 0; i <= this; i++) { result.push(i); } return result; // 返回创建的数组 }; (8).iterate() // [0, 1, 2, 3, 4, 5, 6, 7, 8]
String 对象
var s1 = ‘abc‘; var s2 = new String(‘abc‘); typeof s1; // "string" typeof s2; // "object" s2.valueOf(); // "abc"
new String(‘abc‘); // String {0: "a", 1: "b", 2: "c", length: 3}
(new String(‘abc‘))[1]; // "b" 有数值键(0
、1
、2
)和length
属性,所以可以像数组那样取值
字符串对象是一个类似数组的对象(很像数组,但不是数组)
String
对象还可以当作工具方法使用,将任意类型的值转为字符串0xFFFF
的字符,即传入的参数不能大于0xFFFF
(即十进制的 65535 )0x20BB7
大于0xFFFF
,导致返回结果出错。。。注意:是结果出错,而不是报错0xFFFF
的字符占用四个字节,而 JavaScript 默认支持两个字节的字符。这种情况下,必须把0x20BB7
拆成两个字符表示
String.fromCharCode(0xD842, 0xDFB7); // "??" //上面代码中,0x20BB7拆成两个字符0xD842和0xDFB7 // (即两个两字节字符,合成一个四字节字符),就能得到正确的结果。 // 码点大于0xFFFF的字符的四字节表示法,由 UTF-16 编码方法决定
‘abc‘.length; // 3
0
开始编号的位置charAt
返回空字符串
var s = new String(‘abc‘); s.charAt(1); // "b" s.charAt(s.length - 1); // "c" ‘abc‘.charAt(1); // "b" ‘abc‘[1]; // "b" ‘abc‘.charAt(-1); // "" ‘abc‘.charAt(3); // ""
charCodeAt
方法返回字符串指定位置的 Unicode 码点(十进制表示),相当于String.fromCharCode()
的逆操作charCodeAt
返回首字符的 Unicode 码点。charCodeAt
方法返回的 Unicode 码点不会大于65536(0xFFFF),也就是说,只返回两个字节的字符的码点。
‘abc‘.charCodeAt(1); // 98 ‘abc‘.charCodeAt(); // 97 ‘abc‘.charCodeAt(-1); // NaN ‘abc‘.charCodeAt(4); // NaN
charCodeAt
,不仅读入charCodeAt(i)
,还要读入charCodeAt(i+1)
,将两个值放在一起,才能得到准确的字符concat
方法会将其先转为字符串,然后再连接
var s1 = ‘abc‘; var s2 = ‘def‘; s1.concat(s2); // "abcdef" s1 // "abc" ‘a‘.concat(‘b‘, ‘c‘); // "abc" var one = 1; var two = 2; var three = ‘3‘; ‘‘.concat(one, two, three); // "123" one + two + three // "33"
slice
方法返回一个空字符串‘JavaScript‘.slice(0, 4); // "Java" ‘JavaScript‘.slice(4); // "Script" ‘JavaScript‘.slice(-6); // "Script" ‘JavaScript‘.slice(0, -6); // "Java" ‘JavaScript‘.slice(-2, -1); // "p" ‘JavaScript‘.slice(2, 1); // ""
substring
方法会自动更换两个参数的位置substring
方法会自动将负数转为0‘JavaScript‘.substring(0, 4); // "Java" ‘JavaScript‘.substring(4); // "Script" ‘JavaScript‘.substring(10, 4); // "Script" // 等同于 ‘JavaScript‘.substring(4, 10); // "Script" ‘Javascript‘.substring(-3); // "JavaScript" ‘JavaScript‘.substring(4, -3); // "Java"
__x__(75)1012第十三天__ JavaScript 包装对象
标签:val define 返回值 计数 min 精确 取出 数位 布尔运算
原文地址:https://www.cnblogs.com/tianxiaxuange/p/9780406.html