JS —— 包装类型

5 篇文章 0 订阅

JS为了使得原始值和对象也产生联系,和其他面向对象的编程语言一样,实现了原始值对应的包装类型。

  • JS原始值:
    Number
    Boolean
    String
    Symbol
    Undefined
    Null

1. Number类型

数值对象只有两个属性:
__proto__ 属性指向其原型对象、 [[PrimitiveValue]] 保存原始值。

对象原型上:

> let n = new Number(1);
// 构造函数
> n.__proto__.constructor;
  ƒ Number() { [native code] }
// toExponential(fractionDigits) 转为指数形式 返回字符串
> 1.12345.toExponential();	// "1.12345e+0" 转为指数形式
> 1.12345.toExponential(3);	// "1.123e+0" 可指定小数位数
> 12345.toExponential();	// Uncaught SyntaxError: Invalid or unexpected token
> 12345..toExponential();	// "1.2345e+4" 可用..调用该方法
> 12345 .toExponential();	// "1.2345e+4" 前面空格也行
// toFixed(digits) 格式化小数 返回字符串
> 12345 .toFixed(2);		// "12345.00" 格式化小数位数
> 12345..toFixed(2);		// "12345.00" 同理
> 1.2345.toFixed(3);		// "1.234"
> 12345.toFixed(2);			// Uncaught SyntaxError: Invalid or unexpected token
// toPrecision(precision) 指定有效位数
> 12345..toPrecision();		// "12345"
> 12345..toPrecision(3);	// "1.23e+4"
> 1.2345.toPrecision(3);	// "1.23"
// 字符串表示和值的方法
> 12345..toString();		// "12345"
> 12345..toLocaleString();	// "12,345"
> 12345..valueOf();			// 12345

对象原型性的构造函数上:

// 属性:

// 可表示的最小误差
> Number.EPSILON;			// 2.220446049250313e-16
// 可表示的最大值
> Number.MAX_VALUE;			// 1.7976931348623157e+308
// 可表示的最小值
> Number.MIN_VALUE;			// 5e-324
// 最大的安全整数
> Number.MAX_SAFE_INTEGER;	// 9007199254740991
// 最小的安全整数
> Number.MIN_SAFE_INTEGER;	// -9007199254740991
// 正无穷大
> Number.POSITIVE_INFINITY;	// Infinity
// 负无穷大
> Number.NEGATIVE_INFINITY;	// -Infinity
// 非数值
> Number.NaN;				// NaN

// 方法:

// 判断是否有限
> Number.isFinite(Infinity);// false
> Number.isFinite(1);		// true
// 判断是否为整数
> Number.isInteger(12345);	// true
> Number.isInteger(1.2345);	// false
// 判断是否为NaN
> Number.isNaN(NaN);		// true
> Number.isNaN(null);		// false
// 判断是否为安全整数
> Number.isSafeInteger(Infinity);	//false
> Number.isSafeInteger(12345);		// true
// 数值解析
> Number.parseInt("1.2345");		// 1
> Number.parseFloat("1.2345");		// 1.2345

2. 布尔类型:

布尔对象也只有两个属性:
__proto__ 属性指向其原型对象、 [[PrimitiveValue]] 保存原始值。

对象原型上:

// 对象原型的构造函数
> console.dir(false.__proto__.constructor);		// ƒ Boolean()
// 布尔对象的字符串表示
> false.__proto__.toString();	// "false"
// 布尔对象的值:
> false.__proto__.valueOf();	// false

3. String类型

参考博文:https://blog.csdn.net/qq_45668041/article/details/115742729

4. Symbol类型

  • 注意:
    不可用new创建Symbol对象!
  • 但可通过 Object() 方法创建!
> new Symbol("foo");	// Uncaught TypeError: Symbol is not a constructor
> let symObj = Object(Symbol("foo"));
> typeof symObj;			// "object"
> typeof Symbol("sym");		// "symbol"

对象原型上:

constructor: ƒ Symbol()
description: (...)
toString: ƒ toString()
valueOf: ƒ valueOf()
Symbol(Symbol.toPrimitive): ƒ [Symbol.toPrimitive]()
Symbol(Symbol.toStringTag): "Symbol"
get description: ƒ description()
__proto__: Object

对象原型的构造函数上:

asyncIterator: Symbol(Symbol.asyncIterator)
caller: (...)
for: ƒ for()
hasInstance: Symbol(Symbol.hasInstance)
isConcatSpreadable: Symbol(Symbol.isConcatSpreadable)
iterator: Symbol(Symbol.iterator)
keyFor: ƒ keyFor()
length: 0
match: Symbol(Symbol.match)
matchAll: Symbol(Symbol.matchAll)
name: "Symbol"
prototype: Symbol {Symbol(Symbol.toStringTag): "Symbol", constructor: ƒ, toString: ƒ, valueOf: ƒ,}
replace: Symbol(Symbol.replace)
search: Symbol(Symbol.search)
species: Symbol(Symbol.species)
split: Symbol(Symbol.split)
toPrimitive: Symbol(Symbol.toPrimitive)
toStringTag: Symbol(Symbol.toStringTag)
unscopables: Symbol(Symbol.unscopables)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值