JavaScript基本类型与引用类型(二)
前文已经对基本类型和引用类型作了简单的介绍,本文将进一步介绍基本类型和引用类型。
基本包装类型
为了方便操作基本类型的值,JavaScript提供了特殊的引用类型:Boolean、Number、String。这些类型与其他的引用类型相似,但是也具有各自的基本类型的特殊行为。每读取一个基本类型,后台都会创建一个对应的基本包装类型的对象。
1 var str="hello world";
2 var str1=str.substring(0,3);
3 console.log(str1);
上面的代码定义了变量str,str包含一个字符串,字符串是一个基本类型的值。第二行调用了str的substring方法,我们知道str是基本类型,基本类型没有方法和属性。但是我们这里为什么能够调用方法,那是因为JavaScript在后台进行了一系列的处理。第二行在读取字符串str时,后台做了如下处理:
创建String类型的一个实例;
在实例上调用执行的方法;
销毁这个实例。
可以用下面的代码表示上面的三个步骤:
1 var str= new String("hello world");
2 var str1 = str.substring(0,3);
3 str=null;
经过上面的处理,基本的字符串值就变成了String对象。上面的过程适用于Boolean、Number和String。但是引用类型与基本包装类型是有区别的,我们虽然可以通过str调用相关方法,但是我们不能为str添加额外的属性和方法。
1 var str= "hello world";
2 str.test="1111";
3 console.log(str.test);//undefined
4 str1.test="1111";
5 console.log(str1.test);//1111
上面的代码,在第二行为str添加了属性test,但是我们在第三行访问该属性,并没有test属性,添加不成功。但是我们通过String对象实例的str1,添加了test属性可以正常访问。
我们不提倡显式地调用Boolean、Number和String对象,会让我们在处理变量的时候容易出错,很难分清是引用类型还是基本包装类型。基本包装类型typeof的返回值为object。
通过new 调用基本包装类型构造函数,和调用同名的转型函数是不一样的。
1 var num="25";
2 num=Number(25);
3 console.log(typeof num);
4 var num1 = new Number("25");
5 console.log(typeof num1);
在第二行调用了转型函数,num由字符串类型转为数字类型,typeof输出为numbeer。但是通过 new Number创建的变量的num1的typof是object类型。
Boolean类型
Boolean类型是与布尔值对于的引用类型。要创建Boolean对象,可以使用构造函数 new,并传入true或者false值。
var flag = new Boolean(true);
var result=flag&&true;
console.log(result);
Boolean实例重写了valueOf方法,返回基本类型值true或者false,重写了toString方法,返回"true"或者“false”。上面的代码我们使用Boolean构造函数创建了对象flag,第二行通过&&表达式求值。最后的值为true。
Number类型
Number类型是数字值对应的引用类型。要创建Number类型,可以调用Number构造函数,并传递数字值。Number提供了toFixed方法,可以对数值进行四舍五入,并保留指定的小数位数。
1 var num=12.345343555222;
2 console.log(num.toFixed(6));//12.345344
上面的代码第一行创建了一个num变量,并赋值。第二行调用toFixed方法,保留小数点后6位有效数字,并进行四舍五入。
String类型
String类型是字符串的对象包装类型。可以使用String构造函数来创建。
1 var str = new String("hello javascript");
上面通过String构造函数创建了字符串的对象包装类型。String类型提供了一些常用的操作方法。
字符方法
String类型提供了两个用于访问字符的方法:charAt和charCodeAt。两个方法都是传入一个参数,基于0的字符位置。charAt返回字符串给定位置的字符。
1 var str = new String("hello javascript");
2 var str1=str.charAt(1);
3 console.log(str1);//e
上面的方法调用String类型的charAt方法,返回字符e。
charCodeAt返回字符串指定位置的字符编码。
1 var str = new String("hello javascript");
2 var str1=str.charCodeAt(1);
3 console.log(str1);//101
字符串操作方法
String类型有很多常用的字符串操作方法。concat方法,用于拼接字符串。
1 var str="hello";
2 var str1=str.concat(" world");
3 console.log(str1);//hello world
JavaScript提供了三个基于字符串创建新的字符串的方法:slice、substr、substring。三个方法都是接收一个或者两个参数。第一个参数指定字符串的开始位置,slice和substring的第二个参数是字符串的结束位置。substr第二个参数指字符个数。如果没有第二个参数,三个方法都是到字符串的末尾。
1 var str="hello world";
2 var str1=str.slice(1,3);
3 var str2=str.substr(1,3);
4 var str3=str.substring(1,3);
5 console.log(str1);//el
6 console.log(str2);//ell
7 console.log(str3);//el
上面的代码介绍了slice、substr和substring的用法。可以看到str1和str3的值是相同的。但是当我们传入的参数是负值的情况下,返回的值就不同了。slice方法将传入的负值与字符串的长度相加,substr将传入的第一个负值与字符串的长度相加。substring将所有负值参数都变为0。
1 var str="hello world";
2 var str1=str.slice(-3,-1);//相当于slice(8,10)
3 var str2=str.substr(-1);//相当于substr(10);
4 var str3=str.substring(-1,3);//相当于substring(0,3)
5 console.log(str1);//rl
6 console.log(str2);//d
7 console.log(str3);//hel
字符串位置方法
String类型提供了两个查找字符位置的方法,indexOf和lastIndexOf。这个两个方法都是从一个字符串搜索给定的子字符串方法的位置,如果搜索不到则返回-1。indexOf是从字符串的开始位置搜索,lastIndexOf是从字符串的末尾开始搜索。indexOf和lastIndexOf都可以传递第二个参数,表示从字符串的哪个位置开始搜素。
1 var str="hello world";
2 var i = str.indexOf("el");
3 var j = str.lastIndexOf("hl");
4 console.log(i);//1
5 console.log(j);//-1
1 var str="hello javascript i love you";
2 var arry=[];
3 var pos=str.indexOf("o");
4 while(pos>-1){
5 arry.push(pos);
6 pos=str.indexOf("o",pos+1);
7 }
8 console.log(arry.toString());//4,20,25
上面的代码在长的字符串中拥有多个指定的字符o,通过循环调用indexOf,并传入了第二个参数。或者了每个给定字符的位置。
String类型中还提供了trim方法,可以删除前置以及后缀的所有空格,并返回新的字符串。
var str=" hello world "; var str1=str.trim(); console.log(str1);//hello world
String类型还提供了字符串进行大小写转换的方法。比如toUpperCase、toLowerCase。
1 var str="Hello World";
2 console.log(str.toUpperCase());//HELLO WORLD
3 console.log(str.toLowerCase());//hello world
字符串模式匹配方法
前面已经介绍过正则表达式的模式匹配,也简单介绍了字符串的迷失匹配方法。本节进一步介绍字符串的模式匹配方法。
String类型提供了几个常用的模式匹配方法,match方法在本质上与RegExp的exec方法相似。match方法只接受一个参数,要么是一个正在表达式,要么 是一个RegExp对象。
var str="cat bat dat xat";
var pattern=/.at/;
var str1=str.match(pattern);
console.log(str1[0]);
console.log(str1.index);
console.log(pattern.lastIndex);
上面的代码的代码输出cat,0,0
JavaScript基本类型与引用类型(二)的更多相关文章
- JavaScript值类型和引用类型有哪些
JavaScript值类型和引用类型有哪些 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数.
- JavaScript 值类型和引用类型的初次研究
今天遇到一个坑,具体的不多说,直接上代码 var a = [ [],[],[1,2,3] ] var b = ['颜色','大小','尺寸'] var arr = [] for(let i = 0; ...
- JavaScript基本类型与引用类型
前面已经说过,JavaScript变量是松散类型,它可以保存任何类型的值.变量的值以及数据类型可以在脚本的生命周期内发生改变.变量包含两种不同类型的值:基本类型和引用类型.基本类型值的是简单的数据段, ...
- 04.C#类型系统、值类型和引用类型(二章2.2-2.3)
今天要写的东西都是书中一些概念性的东西,就当抄笔记,以提问对话的方式将其写出来吧,说不定以后面试能有点谈资~~~ Q1.C#1系统类型包含哪三点特性? A1.C#1类型系统是静态的.显式的和安全的. ...
- 理解JavaScript原始类型和引用类型
原始类型 我们知道类型(type)定义为值的一个集合,所以每种原始类型定义了它包含的值的范围及其字面量表示形式.一共有5 种原始类型(primitive type),即 Undefined.Null. ...
- javascript 值类型与引用类型
写的比较简单哈,只是用来记忆下 (1)值类型:undefined.null.Boolean.Number和String (2)引用类型:对象.数组.函数
- javascript 值类型和引用类型
值类型 1. 值类型:string/number/boolean/undefined: 2. 存储:值类型的数据,存储的是数据本身的变量: 3. 赋值:直接将存储的数据复制一份进行赋值,两份数据在内存 ...
- 值类型和引用类型(C#基础知识复习)
一.值类型和引用类型 二.值类型的赋值和相等 三.引用类型的赋值和同一
- js值类型与引用类型
JavaScript值类型和引用类型有哪些 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数. 三.如何理解值类型和引用类型及举例 我们可以用“连锁店”和“ ...
随机推荐
- centeros 6 远程升级ssl ssh 的shell脚本
变量说明 SSL_N=openssl-1.0.2p #ssl 版本SSH_N=openssh-7.9p1 #ssh 版本ZLIB_N=zlib-1.2.11 # zlib 版本 脚本分为两个,因为升级 ...
- Linux硬盘的检测--smartctl详细介绍
概述 随着硬盘容量.速度的快速发展,硬盘的可靠性问题越来越重要,今天的单块硬盘存储容量可轻松达到1TB,硬盘损坏带来的影响非常巨大.不同的文件系统(xfs,reiserfs,ext3)都有自己的检测 ...
- 条款14:在资源管理类中心copying行为(Think carefully about copying behavior in resource-manage classes)
NOTE: 1.复制RAII 对象必须一并赋值它所管理的资源,所以资源的copying行为决定RAII对象的copying行为. 2.普遍而常见的RAII class copying 行为是: 抑制c ...
- 转载:rest-framework框架的基本组件
知识预览 快速实例 序列化 视图三部曲 认证与权限组件 解析器 分页 回到顶部 快速实例 Quickstart 回到顶部 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们 ...
- 利用OpenXml读取、导出Excel
OpenXml是通过 XML 文档提供行集视图.由于OPENXML 是行集提供程序,因此可在会出现行集提供程序(如表.视图或 OPENROWSET 函数)的 Transact-SQL 语句中使用 OP ...
- Java基础学习总结(92)——Java编码规范之排版、注释及命名
为使开发人员养成良好的开发习惯,编写可读性强.易维护的程序,结合以往资料,现整理Java编码规范,将之作为开发人员的参照依据. 一.排版 1.相对独立的程序块之间必须加空行 下列情况应该使用一个空行: ...
- Run-time Settings--General--Run Logic
LR单用户,重复操作日志 案例:假如你想在一个脚本中,实现登录执行1次,查询执行2次,插入执行3次,怎么办?录3个脚本?每个事务分别在脚本中复制N次? 当然不用,LR早就想到了你的需求,下面让我们隆重 ...
- Leetcode 239.滑动窗口最大值
滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值. 示例: ...
- B题 Sort the Array
题目大意:判断能否通过一次倒置,使序列变为一个递增序列 如果可以,输出倒置那一段的起始点和终点的位置: 题目链接:http://codeforces.com/problemset/problem/45 ...
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]
历届试题 地宫取宝 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件 ...