首页 web前端 js教程 js类型转换与引用类型详解(Boolean_Number_String)_javascript技巧

js类型转换与引用类型详解(Boolean_Number_String)_javascript技巧

May 16, 2016 pm 04:56 PM
js 引用类型 类型转换

一、类型转换

1.转换成字串
ECMAScript的Boolean值、数字和字串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
如:

复制代码 代码如下:

var sColor = "blue";
alert(sColor.length);//outputs "4"

总而言之,3种主要的原始值Boolean值、数字和字串都有toString()方法。ECMAScript定义的所有对象都有toString()方法,无论它是伪对象,还是真的对象。

Boolean型的toString()方法只是输出"true"或"false",结果由变量的值决定:

复制代码 代码如下:

var bFound = false;
alert(bFound.toString());//outputs "false"

Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式,采用默认模式,toString()方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学记数法)。
复制代码 代码如下:

var iNum1 = 10;
var fNum2 = 10.0;
alert(iNum1.toString()); //outputs "10"
alert(fNum2.toString()); //outputs "10"

采用Number类型的toString()方法的基模式,可以用不同的基(进制基数)输出数字。
复制代码 代码如下:

var iNum = 10;
alert(iNum.toString(2));  //outputs "1010"
alert(iNum.toString(8));  //outputs "12"
alert(iNum.toString(16)); //outputs "A"

2.转换成数字
ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat()。
注意:只有对String类型(Number除外)调用这些方法,才能正确运行对其他类型返回的都是NaN。

例如:

复制代码 代码如下:

var iNum1 = parseInt("1234blue");//returns 1234
var iNum2 = parseInt("oxA"); //returns 10
var iNum3 = parseInt("22.5"); //returns 22
var iNum4 = parseInt("blue"); //returns NaN

parseInt()方法还有基模式,可以把二进制、八进制、十六进制或者其他任何进制的字符串转换成十进制整数。第二个参数指定按哪一种进制来解析。
复制代码 代码如下:

var iNum1 = parseInt("AF",16);// returns 175
var iNum2 = parseInt("10",2); // returns 2
var iNum3 = parseInt("10",8); //returns 8
var iNum4 = parseInt("10",10); //returns 10

说明:如果十进制数包含前导0,那么最好采用基数10,否则得到的是八进制的值。
复制代码 代码如下:

var iNum1 = parseInt("010");  // returns 8
var iNum2 = parseInt("010",8); //returns 8
var iNum3 = parseInt("010",10);//returns 10

parseFloat()方法与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字串转换成数字。对于这个方法来说,第一个出现的小数点是有效字符。如果用两个小数点,第二个小数点将被看作无效的。使用该方法的另一个不同之处在于,字串必须以十进制形式表示浮点数。
复制代码 代码如下:

var fNum1 = parseFloat("1234blue"); //returns 1234.0
var fNum2 = parseFloat("0xA"); //returns NaN
var fNum3 = parseFloat("22.5"); //returns 22.5
var fNum4 = parseFloat("22.34.5");//returns 22.34
var fNum5 = parseFloat("0908");//returns NaN
var fNum6 = parseFloat("blue");//returns NaN

3.强制类型转换
ECMAScript中可用的3种强制类型转换如下:

(1).Boolean(value)
把给定的值转换成Boolean型。
当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。
如:

复制代码 代码如下:

var b1 = Boolean(""); // false;
var b2 = Boolean("hi");//true
var b3 = Boolean(100);//true
var b4 = Boolean(null);//false
var b5 = Boolean(0);//false
var b6 = Boolean(new Object());//true

(2).Number(value)
把给定的值转换成数字(可以是整数或浮点数)。
还记得parseInt()和parseFloat()方法只转换第一个无效字符之前的字符串,因此"4.5.6"将被转换为"4.5"。用Number()进行强制类型转换,"4.5.6"将返回NaN,因为整个字符串值不能转换成数字。如果字符串能被完整地转换,Number()将判断是调用parseInt()方法还是调用parseFloat()方法。
如:
复制代码 代码如下:

Number(false);//0
Number(true);//1
Number(undefined);//NaN
Number(null);//0
Number("5.5");//5.5
Number("56");//56
Number("5.6.7");//NaN
Number(new Object());//NaN
Number(100);//100

(3).String(value)
把给定的值转换成字串。
与调用toString()方法的唯一不同之处在于,对null或undefined值强制类型转换可以生成字符串而不引发错误:
复制代码 代码如下:

var s1 = String(null);//"null"
var oNull = null;
var s2 = oNull.toString();//causes an error

二、引用类型
引用类型通常叫作类(class),也就是说,遇到引用值时,所处理的就是对象。ECMAScript定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。

1.Object类
ECMAScript中的所有类都由这个类继承而来,Object类中的所有属性和方法都会出现在其他类中(被覆盖)。

Object类的属性:

(1).Constructor----对创建对象的函数的引用(指针)。对于Object类,该指针指向原始的object()函数。

(2).Prototype----对该对象的对象原型的引用。对于所有的类,它默认返回Object对象的一个实例。

Object类的方法:

(1).HasOwnProperty(property)----判断对象是否有某个特定的属性。必须用字符串指定该属性(例如:o.hasOwnProperty("name"))。

(2).IsPrototypeOf(object)----判断该对象是否为另一个对象的原型。

(3).PropertyIsEnumerable(property)----判断给定的属性是否可以用for..in语句进行枚举。

(4).ToString()----返回对象的原始字符串表示。不同的ECMAScript实现具有不同的值。

(5).ValueOf()----返回最适合该对象的原始值。对于许多类,该方法返回的值都与toString()的返回值相同。

2.Boolean类
在ECMAScript中很少使用Boolean对象,即使使用,也不易理解。
例如:

复制代码 代码如下:

var oFalseObject  = new Boolean(false);
var bResult = oFalseObject  && true;//outputs  true;

原因:在Boolean表达式中,所有对象都会被自动转换为true。

3.Number类
Number.MAX_VALUE等等特殊值都Number类的静态属性。要得到数字对象的Number原始值,只需要使用valueOf()方法:
var iNumber = oNumberObject.valueOf();
除从Object类继承的标准方法外,Number类还有几个处理数值的专用方法。

toFixed()方法:
返回的是具有指定位数小数的数字的字符串表示。方法能表示具有0到20位小数的数字,超出这个范围的值会引发错误。
如:

复制代码 代码如下:

var oNumberObject = new Number(99);
aler(oNumberObject.toFixed(2));//outputs "99.00"

toExponential()方法:
返回的是用科学记数法表示的数字的字符串形式。该方法也有一个参数,指定要输出的小数的位数。例如:
复制代码 代码如下:

var oNumberObj = new Number(99);
alert(oNumberObj.toExponential(1));//outputs "9.9e+1"

toPrecision()方法:
根据最有意义的形式来返回数字的预定形式或指数形式。它有一个参数,即用于表示数的数字总数(不包括指数)。
复制代码 代码如下:

var oNumberObj = new Number(99);
alert(oNumberObj.toPrecision(1));//outputs "1e+2" ==100

可以看出,toPrecision()方法会对数进行舍入,从而得到尽可能接近真实值的数。
如:
复制代码 代码如下:

var oNumberObj = new Number(99);
alert(oNumberObj.toPrecision(2));// outputs "99"
alert(oNumberObj.toPrecision(3));// outputs "99.0"

toFixed()、toExponential()和toPrecision()方法都会进行舍入操作,以便用正确的小数位数正确地表示一个数。

toLocaleString()方法:
可以在页面上格式显示,如5210.50显示为5,210.50,但是如果在使用其值时,应该用parseFloat($("N_YJJE").value.replace(//,/g, ""));的形式替换掉逗号,后得到其值。

注意:与Boolean对象相似,Number对象也很重要,不过应该少用这种对象,以避免发生潜在的问题。只要可能,都使用数字的原始表示法。

4.String类
String对象的valueOf()方法和toString()方法都会返回String型的原始值:

复制代码 代码如下:

alert(oStringObj.valueOf() == oStringObj.toString());//outputs "true"

String类具有属性length,它是字符串的字符个数:
复制代码 代码如下:

var oStringObj = new String("hello world");
alert(oStringObj.length);outputs "11"

注意:即使字符串包含双字节的字符,每个字符也只算一个字符。

charAt()方法:
返回的是包含指定位置处的字符的字符串:

复制代码 代码如下:

var oStringObj = new String("hello world");
alert(oStringObj.charAt(1));outputs "e"

charCodeAt()方法:
返回的是包含指定位置处的字符代码的字符串:
复制代码 代码如下:

var oStringObj = new String("hello world");
alert(oStringObj.charCodeAt(1));outputs "101"

concat()方法:
用于把一个或多个字符串连接到String对象的原始值上。原String对象不变。
复制代码 代码如下:

var oStringObj = new String("hello ");
var sResult = oStringObj.concat("world");//oStringObj+"world";更常见
alert(sResult);//outputs "hello world"
alert(oStringObj);//outputs "hello"

indexOf()和lastIndexOf()方法返回的都是指定的子串在另一个字符串中的位置(或-1,如果没有找到这个子串)。这两个方法的不同之处大于,indexOf()是从字串的开头(位置0)开始检索子串,而lastIndexOf()则是从字串的结尾开始检索子串的。

localeCompare(),对字符串进行比较(按照字母顺序比较,越后越大)。该方法有一个参数--要进行比较的字符串,返回的是下列3个值之一:
1.如果String对象按照字母顺序排在参数中的字符串之前,返回负数(最常见的是-1,不过真正的返回由实现决定的)。
2.如果String对象等于参数中的字符串,返回0。
3.如果String对象按照字母顺序排在参数中的字符串之后,返回正数(最常见的是1,不过真正的返回由实现决定的)

slice()和substring()方法:
这两个方法返回的都是要处理的字符串的子串,都接受一个或两个参数。第一个参数是要获取的子串的起始位置,第二个参数是要获取子串终止前的位置(终止位置处的字符不包括大返回的值内)。如果省略第二个参数,终止位就默认为字符串的长度。这两个方法都不改变String对象自身的值。

复制代码 代码如下:

var oStringObj = new String("hello world");
alert(oStringObj.slice(3));//outputs "lo world"
alert(oStringObj.slice(3,7));//outputs "lo w"

注意:对于负数参数,slice()方法会用字符串的长度加上参数,substring()方法则将其作为0处理(也就是说将忽略它)。
复制代码 代码如下:

var oStringObj = new String("hello world");
alert(oStringObj.slice(-3));//outputs "rld"相当于反向取
alert(oStringObj.substring(-3));//outputs "hello world"
alert(oStringObj.slice(3,-4));//outputs "lo w"
alert(oStringObj.substring(3,-4));//outputs "hel" substring()总是把较小的数字作为起始位,较大的数字作为终止位。

toLowerCase()、toLocalLowerCase()、toUpperCase()和toLocaleUpperCase():
前两种方法把字符串转换成全小写的,后两种方法用于把字符串转换成全大写的。toLocalLowerCase()和toLocaleUpperCase()方法是基于特定区域实现的。

记住:String类的所有属性和方法都可应用于String原始值上,因为它们是伪对象。

5.instanceof运算符
在使用typeof运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回"object"。instanceof方法要示开发者明确地确认对象为某特定类型。如:

复制代码 代码如下:

var oStrObj = new String("hello world");  
alert(oStrObj instanceof String);//outputs "true"
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

推荐:优秀JS开源人脸检测识别项目 推荐:优秀JS开源人脸检测识别项目 Apr 03, 2024 am 11:55 AM

人脸检测识别技术已经是一个比较成熟且应用广泛的技术。而目前最为广泛的互联网应用语言非JS莫属,在Web前端实现人脸检测识别相比后端的人脸识别有优势也有弱势。优势包括减少网络交互、实时识别,大大缩短了用户等待时间,提高了用户体验;弱势是:受到模型大小限制,其中准确率也有限。如何在web端使用js实现人脸检测呢?为了实现Web端人脸识别,需要熟悉相关的编程语言和技术,如JavaScript、HTML、CSS、WebRTC等。同时还需要掌握相关的计算机视觉和人工智能技术。值得注意的是,由于Web端的计

如何使用PHP和JS创建股票蜡烛图 如何使用PHP和JS创建股票蜡烛图 Dec 17, 2023 am 08:08 AM

如何使用PHP和JS创建股票蜡烛图股票蜡烛图是股票市场中常见的一种技术分析图形,通过绘制股票的开盘价、收盘价、最高价和最低价等数据,帮助投资者更直观地了解股票的价格波动情况。本文将教你如何使用PHP和JS创建股票蜡烛图,并附上具体的代码示例。一、准备工作在开始之前,我们需要准备以下环境:1.一台运行PHP的服务器2.一个支持HTML5和Canvas的浏览器3

股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤 股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤 Dec 17, 2023 pm 06:55 PM

股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤,需要具体代码示例随着互联网和科技的快速发展,股票交易已经成为许多投资者的重要途径之一。而股票分析是投资者决策的重要一环,其中蜡烛图被广泛应用于技术分析中。学习如何使用PHP和JS绘制蜡烛图将为投资者提供更多直观的信息,帮助他们更好地做出决策。蜡烛图是一种以蜡烛形状来展示股票价格的技术图表。它展示了股票价格的

泛型函数在Golang中如何处理指针和引用类型? 泛型函数在Golang中如何处理指针和引用类型? Apr 16, 2024 pm 04:06 PM

泛型函数在Go中处理指针类型时,会收到原始变量的引用,允许修改变量值。引用类型则在传递时会被复制,使函数无法修改原始变量值。实战案例包括使用泛型函数比较字符串或数字切片。

golang函数的类型转换 golang函数的类型转换 Apr 19, 2024 pm 05:33 PM

函数中类型转换允许将一种类型的数据转换为另一种类型,从而扩展函数的功能。使用语法:type_name:=variable.(type)。例如,可使用strconv.Atoi函数将字符串转换为数字,并处理转换失败的错误。

PHP与JS开发技巧:掌握绘制股票蜡烛图的方法 PHP与JS开发技巧:掌握绘制股票蜡烛图的方法 Dec 18, 2023 pm 03:39 PM

随着互联网金融的迅速发展,股票投资已经成为了越来越多人的选择。而在股票交易中,蜡烛图是一种常用的技术分析方法,它能够显示股票价格的变化趋势,帮助投资者做出更加精准的决策。本文将通过介绍PHP和JS的开发技巧,带领读者了解如何绘制股票蜡烛图,并提供具体的代码示例。一、了解股票蜡烛图在介绍如何绘制股票蜡烛图之前,我们首先需要了解一下什么是蜡烛图。蜡烛图是由日本人

隐式类型转换:类型的不同变体及其在编程中的应用探究 隐式类型转换:类型的不同变体及其在编程中的应用探究 Jan 13, 2024 pm 02:54 PM

探索隐式类型转换的不同类型及其在编程中的作用引言:在编程中,我们经常需要处理不同类型的数据。有时候,我们需要将一种数据类型转换为另一种类型以便进行特定操作或满足特定要求。在这个过程中,隐式类型转换是一个非常重要的概念。隐式类型转换指的是在不需要显式指定转换类型的情况下,编程语言会自动进行数据类型转换的过程。本文将探索隐式类型转换的不同类型及其在编程中的作用,

js和vue的关系 js和vue的关系 Mar 11, 2024 pm 05:21 PM

js和vue的关系:1、JS作为Web开发基石;2、Vue.js作为前端框架的崛起;3、JS与Vue的互补关系;4、JS与Vue的实践应用。

See all articles