博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaScript】关于包装类与类型转换
阅读量:6040 次
发布时间:2019-06-20

本文共 3512 字,大约阅读时间需要 11 分钟。

  hot3.png

一、元类型系统与对象类型系统。
1、元类型系统:undefined、boolean、number、string、function、object
2、对象类型系统: 元类型的   object   中的一个分支
3、
在元数据经过“包装类”包
装后得到的对象,与原来的元数据并不再是同一数据,只是二者的值相等而已。
4、  Boolean、Number、String分别是boolean、number、string的包装类。
二、显式包装:
var  v1 = 100,  v2 = 'hello, world!',  v3 = true;// 使用构造器的显式包装alert( Number(v1) );alert( String (v2) );alert( Boolean(v3) );等价形式:// 使用Object() 的显式包装alert( Object (v1) );alert( Object (v2) );alert( Object (v3) );
三、隐式包装:"包装"行为发生在存取行为过程中。
var data = 100;alert(data instanceof Number);  //false,instanceof 运算不对原数据进行"包装"//alert('constructor' in data);  // 异常, 不能对元数据做 in 运算//"包装"行为发生在存取行为过程中data.constructor = Number;  //成员存取运算时alert(data['constructor']);  //function Number() { [native code] }//data.toString = function () { } data.toString();  //方法调用, 其实是成员存储后的函数调用运算alert(data.toString);  //function toString() { [native code] }//做delete 运算时alert(delete data.toString);  //true
四、值类型之间的转换。
1、 undefined   能转换为特殊数字值 NaN、 字符串   'undefined'   与布尔值 false   。
// 示例: undefined 的转换var value = undefined;// 显示NaNalert(10 + value);if (!value) {     alert('' + value);  //undefined}
2、number的转换:
    1)  任何值都可以被转换到   number   类型的值。如果转换得不到一个有效的数 值,那么结果会是一个   NaN 。而   NaN   其实是一个可以参与数值运算的值,这
样处理的目的,是使得表达式可以尽量求值,而不是弹出一个异常。
     2)N umber   值转换到布尔值时,非零值都转为   true ,零与   NaN   都转为   false   。
     
Number. NEGATIVE_INFINITY  
:比
(-Number.MAX_VALUE)  
更小的值
     
Number. POSITIVE_INFINITY
:比  
(Number.MAX_VALUE)  
更大的值
     
Number. MIN_VALUE
:最接近零的正数值
     
Number. MAX_VALUE
:最大的正数值
     
Global.Infinity
 
Number. POSITIVE_INFINITY  
的初始值
      3)
Number  
值在转换到字符串时有极其复杂的内部规则。因此除非使用显式
转换
,否则很难保证  
Number  
字符串这一转换的输出格式。
     
Number. NEGATIVE_INFINITY  
:转换为
'-Infinity'
     
Number. POSITIVE_INFINITY
:转换为  
'Infinity'
     
Global.Infinity
:转换为  
'Infinity'
     
Global.NaN
:转换为  
'NaN'
     
除此之外,其它数值都能被转换为一个有数值含义的字符串,例如  
'5e-324 '
3、
boolean  
值的转换:
     1)
true  
false  
总是被转换为数值  
1  
 
0
     2)
boolean  
值的
true  
false  
总是被转换为字符串的  
"true"
"false"  
var checked = true;var i = false;     if (checked) {     i++;}alert(i);  //1var i = false;i += checked;//或者是i += !!checked;alert(i);  //1alert(true + false);  //1
4、string的转换:
1)在字符串中,有且仅有空字符串
能被转换为布尔值 
false
,其它的(任何有值的)字符串在转换后都会得到 
true。
2)示例:
alert('0022' - 1);  // 显示21alert('00.22' * 10);  // 显示2.2 alert('.22' * '100.');  // 显示2.2/*** 例1* 前缀0 可以用在直接量中,以表示8进制* 结果值输出: 12*/alert(033 - 15);/*** 例2* 前缀0 用在字符串中,在(隐式)转换将被忽略* 结果值输出:18*/alert('033' - 15);
五、parseInt( ) 与 parseFloat( )
     1)
parseInt()
支持传入一个值在
2~36
(0-9,A-Z|a-z)
之间的“  
radix
”参数来指定所使用的进
制。语法如下:
     
parseInt(aString,[radix])
     2)
调用
parseInt()
时,如果转换不能成功,则返回  
NaN
。如果  
radix  
16  
,无论
aString
是否有前缀“  
0x
”,该字符串都将按  
16  
进制处理;如果  
radix  
8  
,无论
aString
是否有前缀“  
0
”,则该字符串都将按8
进制处理。
     
如果不指定  
radix
,那么将采用数值直接量声明中使用的规则:将有前缀
0x
”的处理成  
16  
进制字符串,有前缀“  
0
”的处理为  
8  
进制字符串。
//前缀“0”在隐式转换中不被识别为 8 进制字符串alert( parseInt('033' - 15) );  //18  alert( parseInt('033') - 15 );  //12alert( parseInt(033 - 15) );  //12alert( 033 - 15);  //12
     3)
parseInt()
parseFloa t()  
另一项特性在于总是尽可能地得到转换结果。即使
字符串中只有  
(
前缀的  
)
部分能被转换,那么该转换也将成功进行。有些时候这
项特性很好用,例如在  
WEB  
开发中我们遇到  
CSS  
的属性值带单位  
(pt/px  
)
时,我们可以简单地用  
parseFloa t()
去清除它,以方便参与其它的运算。
示例1:
示例2:
var v = '4F';//忘了传入 radix 参数(或增加“ 0x”前缀)alert(parseInt(v));  //4
六、valueOf( )
1、
当一个引
用类型(例如对象)参与值运算时,会先调用它的  
valueOf( )
方法取值。
2、
如果数据是值类型,则直接参与值运算;否则, 如果 valueOf ( )  返回一个值类型数据,则以该数据参与值运算;否则,   使用 toString( )   返回的字符串参与运算。
/*** 示例: 重写String 对象的valueOf()和toString() 对隐式转换的影响*/String.prototype.valueOf = function() {     return this;  // this 对象是一个引用}String.prototype.toString = function() {     return 'hi, ';}// 显示结果值为 hi, world.'var str = new String('hello, ');alert(str + 'world.');

转载于:https://my.oschina.net/aram/blog/115438

你可能感兴趣的文章
innobackupex 在增量的基础上增量备份
查看>>
Windows Server 2012 R2 DirectAccess功能测试(2)App1服务器安装及配置
查看>>
基于清单的启动器的实现
查看>>
外网用户通过citrix打印慢的解决方法
查看>>
STL容器的使用
查看>>
关于std::map
查看>>
JXL导出Excel文件兼容性问题
查看>>
VBoot1.0发布,Vue & SpringBoot 综合开发入门
查看>>
centos7 安装wps 后 演示无法启动
查看>>
git简单命令
查看>>
LAMP编译部署
查看>>
XenDesktop7.6安装部署入门教程
查看>>
HashMap的工作原理及HashMap和Hashtable的区别
查看>>
GregorianCalendar日历程序
查看>>
Sublime 中运行 Shell 、Python、Lua、Groovy...等各种脚本
查看>>
【Java集合源码剖析】ArrayList源码剖析
查看>>
linux的目录结构
查看>>
这次逻辑通了,
查看>>
HTMLHelper
查看>>
快速构建Windows 8风格应用29-捕获图片与视频
查看>>