特殊的引用类型

今天主要学习了三个特殊的引用类型:Boolean,Number和String。同时也回顾了一下以前学习的知识。

首先,我们知道基本类型值不是对象,因此不应该会有方法。但是,实际上它们是有方法的。每当读取一个基本类型值的时候,后台就会创建一个对应的包装类型的对象,从而让我们可以调用一些方法来操作这些数据。

对基本包装类型的实例调用typeof会返回“object”,而且所有基本包装类型的对象都会被转换为布尔值true。

(一)Boolean类型

要创建一个Boolean对象,可以调用Boolean构造函数并传入true或false。

var boolean1=new Boolean(true);

Boolean类型的实例重写了valueOf()方法,返回基本类型值true或false;重写了toString()方法,返回字符串"true"或"false"。

目前,Boolean类型出现的最常见的问题是在布尔值表达式中使用Boolean对象。例如:

var one=new Boolean(false);

var result=one&&true;

alert(result);//输出true

按理说,在布尔运算中false&&true等于false,但是这里却是true。这是因为这里是对one而不是对它的值(false)进行求值,在布尔表达式中的所有对象都会被转换为true,true&&true结果当然输出为true。

var one=false;

var result=one&&true;

alert(result);//输出false

在这里就是对one的值进行求值,因此false&&true结果输出false。

还有,基本类型与引用类型的布尔值还有两个区别,typeof操作符对基本类型返回"boolean",而对引用类型返回"object"。其次,因为Boolean对象是Boolean类型的实例,所以使用instanceof操作符测试Boolean对象会返回true,而测试基本类型的布尔值会返回false。

(二)Number类型

Number类型也重写了valueOf(),toLocaleString()和toString()方法。valueOf()返回对象表示的基本类型的数值。另外两个返回字符串形式的数值。

Number类型提供的方法:

toFixed()方法会按照指定的小数位返回数值的字符串形式,同时还能自动舍入。例如:

var num=10.005;

alert(num.toFixed(2));//输出“10.01”

toExponential()方法会以指数表示法返回数值的字符串形式。参数也是指定输出结果中的小数位数。

var num=10;

alert(num.toFixed(1));//输出"1.0e+1";

toprecision()方法可能返回fixed格式,也可能返回exponential格式,主要看哪种比较适合。也是接收一个参数,表示数值的所以数字的位数。

var num=99;

alert(num.toprecision(1));//"1e+2"

alert(num.toprecision(2));//99

alert(num.toprecison(3));//99.0

(三)String类型

继承的valueOf(),toLocaleString()和toString()方法都返回对象所表示的基本字符串值。

String类型也提供了很多方法:

charAt()方法以单字节字符串的形式返回给定位置的那个字符。例如:

var one="blue";

alert(one.charAt(1));//输出"l"

如果你想得到的是字符编码,那么可以使用charCodeAt()。

concat()方法用于将一或多个字符串拼接起来,返回拼接得到的新字符串。同时不改变原字符串。

var one="hello "

var result=one.concat("world","!");

alert(result);//输出“hello world!”

三个基于子字符串创建新字符串的方法:slice(),substr()和substring()。这三个方法都返回被操作字符的一个子字符串,而且都接收一或两个参数。slice()和substring()方法第一个参数指定子字符串开始的位置,第二个指定结束位置。substr()第二个参数指定的是返回字符的个数。这三个方法也不会修改原字符串。

var one="hello world";

alert(one.slice(1));//"ello world"

alert(one.substring(1));//"ello world"

alert(one.substr(1));//"ello world"

alert(one.slice(1,7));//"ello w"

alert(one.substring(1,7));//"ello w"

alert(one.substr(1,7));//"ello wo"

当参数是负数时,这三个方法的结果就有很大的不同了。

slice()方法会将传入的负数与字符串长度相加。

substr()方法将第一个参数与字符串长度相加,第二个参数为0。

substring()方法会把所以负值参数变为0。

字符串位置方法:indexOf()和lastIndexOf()。从一个字符串中搜索给定子字符串,返回子字符串的位置。

trim()方法会创建一个字符串的副本,删除前置及后缀的所有空格。

toLowerCase(),toLocaleLowerCase()和toUpperCase(),toLocaleUpperCase()大小写转换的方法

String类型提供了用于字符串中匹配模式的方法。

match()方法,只接收一个参数,正则表达式或一个RegExp对象。

var text="cat,bat,sat,fat";

var pattern=/.at/;

var matches=text.match(pattern);

alert(matches[0]);//"cat"

search()方法参数与match()方法的参数相同。返回字符串中第一个匹配项的索引。

replace()方法接收两个参数:第一个参数可以是字符串或一个RegExp对象,第二个参数可以是字符串或一个函数。

如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有的子字符串需要用正则表达式,而且要指定全局g。

var text="cat,bat,sat,fat";

var result=text.replace("at","on");

alert(result);//输出"con,bat,sat,fat"

result=text.replace(/at/g,"on");

alert(result);//"con,bon,son,fon"

localeCompare()方法用于比较两个字符串,字符串在字母表排在参数之前返回负数,排在之后返回正数,等于返回0;

var num="body";

alert(num.localeCompare("cat"));//-1

alert(num.localeCompare("body"));//0

alert(num.localeCompare("ace"));//1

时间: 2024-11-05 12:18:15

特殊的引用类型的相关文章

C# 引用类型之特例string

在C#编程的时候经常会使用字符串(string)类型,它也是引用类型,但是处处都不作为引用的用法来使用,实属特例,下来我一一罗列出来,供自己记忆方便: 1)字符串的直接赋值:本身字符串就是引用类型,应该使用  new 对象方法一个实例,但是微软为了方便大家,可以直接定义字符串变量 并且赋值操作,例如: string a = "我的中国心"; ,这样只是简化我们的操作: 2)一个字符串赋值给另一个字符串变量:正常的引用类型会将两个引用变量指向同一个地址,但是一个字符串变量赋值给另一个字符

JavaScript的进阶之路(三)引用类型之Object类型和Array类型

引用类型 Object类型 function a(num){ if(num>3){ a(--num); } console.log(num); } a(5); //如何创建对象的实例 var obj1= new Object(); console.log(obj1); obj1.name="吴琼"; obj1.age=28; console.log(obj1.name+" "+obj1.age); //对象字面量语法 ,有点封装的感觉 var obj2 = {

值类型与引用类型的区别

值类型 基本类型  4类8种 整型  byte   字节型   1长度   0~255 short  短整型   2长度 int      整型      4长度 long   长整型   8长度 浮点型  float     单精度浮点型 double 双精度浮点型 字符型  char  单字符型  数据必须包裹在单引号之间 波尔型  bool  逻辑型  true 真.对 /  false  假.错 枚举类型 结构体 引用类型               字符串   string  多个字符

java中四种引用类型(对象的强、软、弱和虚引用)

对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用. ⑴强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出O

javascript中用来定义引用类型的一种"默认"模式

// 终极版:组合使用构造函数模式和原型模式:***************************** // 评价:集构造函数模式和原型模式之大成: 用来定义引用类型的一种默认模式 function Person(name, age, job){ //构造函数用来定义实例属性 this.name = name; this.age = age; this.job = job; this.friends = ["Shelby","Court"]; } Person.p

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

C# 引用类型和值类型

1.引用类型 FCL(Framework)中的大多数类型都是引用类型,引用类型总是在托管堆中分配的,C#的new操作符会返回对象的内存地址,也就是指对象数据的内存地址.在使用引用类型时,存在以下性能问题,这是我们在开发中必须要注意的: a.内存必须从托管堆上分配(也就是说每new一个对象,会占用内存,对象过多就会导致内存占用) b. 堆上分配的每个对象都有一些额外的成员,这些成员必须初始化 c.对象中的其他字节(为字段而设),总是设为0 d.从托管堆中每分配一个对象,可能强制执行一次垃圾回收操作

定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会. 面向对象编程也叫做OOP编程 简单来说面向对象编程就是结构化编程,对程序中的变量结构划分,让编程更清晰. 类的概念: 类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法. 类定义了类的每个对象(称为实例)可以包含什么数据和功能. 类中的数据和函数称为类的成员:数据成员        函数成员 数据成员: 数据成员

基本类型、引用类型、基本包装类型和单体内置对象

基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.基本包装类型和单体内置对象都是特殊的引用类型. 一.基本类型 基本类型包含Undefined.Null.Boolean.Number.String 这5种.基本数据类型是按值访问的,因为可以操作保存在变量中的实际值. 基本类型保存在内存中的栈中,大小固定,复制其变量时会创建这个值的一个副本.用typeof方法可以确定一个值是哪种基本类型. 二.引用类型 引用类型包括Object .Array.  Date.  RegExp.

方法的传递机制---引用类型传递

.Net里的方法是不能独立存在的,调用方法必须使用类或者对象作为主调用者.如果声明方法包含了形参声明,调用方法必须给这些形参指定参数值,调用方法时实际传递给形参的参数值被称为实参. 当引用类型作为参数传递到方法中是如何传递的呢?下面先看一下源码吧,猜猜输出的结果是什么? namespace Test { class Program { static void Main(string[] args) { Person person = new Person(); SetPerson(person)