JavaScript基本包装类型与字符串
2018-04-08 本文已影响0人
Daryl_Z
• Boolean类型
• Number类型
• String类型
• 字符处理
• 字符串类型String
• 字符串的常用方法
先看一个现象:
var t = 9.187; // 编辑,设置
t.toString(); // => “9.187” 为什么一个数值类型有 toString 方法?
针对布尔类型、数值类型、字符串类型 JavaScript 都提供了对应的包装类型。当三种类型的变量在读取
操作的时候,JavaScript 执行引擎会自动创建一个临时包装对象,帮助它可以访问包装对象的方法,使用
完毕后立即销毁包装对象。
例如:
var t = 19; // 创建数值类型的变量。
t.age = 19;// 创建临时对象,但是临时对象用完即毁
console.log(t.age); // undefined
// 临时创建了包装对象,并销毁了
1 Boolean 类型的包装对象
Boolean 类型是引用类型
创建方法:
var t = new Boolean(false); // t 是引用类型
!!t => true 非空对象转成 boolean 类型是 true
typeof t ;//=> object
t instanceof Boolean;//=>true
var m = true;
m.toString(); //=> true ,临时创建包装类型
typeof m ;// => boolean
创建的 true 值的 Boolean 类型在转成 boolean 的简单类型的时候却成了 false,所以会引起很
大误解。所以一般不会这样使用!!!!
2.Number 包装类型
Number 类型是引用类型
创建方法:
var t = new Number(0); // t 是引用类型
typeof t ;//=> object
t instanceof Number;//=>true
Number 类型的常用的方法
toString();//重写了 object 的 toString 方法,可以接受进制的参数。
var t = 2;
t.toString(2);// =>“10”输出二进制的数值 2
t.toString();// => “2” 默认是 10 进制
t.toString(8);// =>“2” 输出 8 进制的数值 2
//toLocalString();// 只是将数值转成字符串
var t = 2;
t.toLocalString();// => “2”
valueOf(); //返回自身
toFixed(); //接受一个参数,限定小数的位数。
// toFixed()有 bug,所以参考 http://qkxue.net/info/109055/toFixed-bug
IE8 及之前的版本对:[-0.94 到-0.5] [0.5-0.94]返回 0,不是 1
a = 1.23; a.toFixed(1) ; => ”1.2”
a = 2.3; a.toFixed(3); => “2.300” 会自动补充 0
toExponential(3);
按指数的形式输出字符串
传入的参数是保留小数的位数
a = 3; a.toExponential(3); // “3.000*e+0”
toPrecision();
接受一个参数。参数是输出数据的总位数。
它会自动根据情况调用 toExponential 或者 toFixed 方法
a = 96;
a.toPrecision(3); //=>96.0
a.toPrecision(1); // => "1e+2"
3 字符串 Sting 包装类型
字符串包装类型 String。跟 Boolean 和 Number 的包装类型一样,在字符串被读取的时候会自动创建
一个包装类型用于包装类型方法的调用,而且会立即销毁。
3.1 创建 String 包装类型
var a = new String("123");
length 属性返回字符串字符的个数。
字符串是不可变的。对字符串的所有操作都会返回一个新字符串,原字符串不变。
• ie6-7: 'abc' + 'cdf';
3.2 字符串包装类型常用方法
• charAt(index)方法:获取某个索引位置的字符,把字符串当字符数组
• charCodeAt(index)方法:获取索引位置的字符 的编码
• stringValue[index];类似数组的使用,获取索引位置的字符,IE8以上才支持。
• concat()方法:连接字符串,可以传入多个参数。
• “22”.concat(‘2’,333, 9); //=> “2223339“
• slice() 类似数组的用法。字符串切片。
• 一个参数,从索引位置到最后。负数从结尾结算。
‘12345”.slice(2);=>”345”
• 两个参数,返回从第一个参数索引位置到最后一个参数索引位置之前的一个字符
• ‘12345’.slice(2,4);=>”34”
• replace(); • 可以传入两个参数。第一个是要替换的原字符串,第二个是替换的新字符串
• 对原字符串没有影响,返回新字符串。
• “12345”.replace(‘4’,”ss”);// => “123ss5”
• 后面会介绍正则表达式
• substring()
• 截取字符串,对原字符串没有影响
• 可以接受两个参数或者一个参数。第一个参数:截取索引位置,第二个是结束的位置。都是正数的
情况跟slice保持一致。负数有点不同。如果出现负数,substring都将其看作0处理。
• substr()
• 截取字符串,跟substring区别就是第二个参数是截取字符串的长度
• 如果第二个参数是负数直接看做0处理
• 第一个参数是负数从末位计算。【IE8有bug】不要用
• trim()
• 方法会从一个字符串的两端删除空白字符
• 并不影响原字符串本身,它返回的是一个新的字符串
• var orig = ' foo '; console.log(orig.trim()); // 'foo’
• IE9以上才支持
• toLowerCase() 会将调用该方法的字符串值转为小写形式,并返回。对原字符串没有影响。
• "ALPHABET".toLowerCase() ;//=>"alphabet"
• toUpperCase() 将调用该方法的字符串值转换为大写形式,并返回。
• console.log( "alphabet".toUpperCase() ); // "ALPHABET"
• toLocaleLowerCase()和toLocaleUpperCase()与上面类似,只有比如土耳其语言有点区别,大部分
都没有区别。
• split() 方法使用指定的分隔符字符串将一个String对象分割成字符串数组,以将字符串分隔为子字符
串,以确定每个拆分的位置。
• 语法 :str.split([separator[, limit]])
• separator:指定表示每个拆分应发生的点的字符串
• limit:一个整数,限定返回的分割片段数量;
各种情况分类:
1 找到分隔符后,将其从字符串中删除,并将子字符串的数组返回。
'abcdef'.split('c');// =>["ab", "def"]
2 如果没有找到或者省略了分隔符,则该数组包含一个由整个字符串组成的元素。
'abcdef'.split('k'); // => ["abcdef"]
3 如果分隔符为空字符串,则将 str 转换为字符数组。
'abcdef'.split(''); // => ["a", "b", "c", "d", "e", "f"]
4 如果分隔符出现在字符串的开始或结尾,或两者都分开,分别以空字符串开头,结尾或两者开
始和结束。因此,如果字符串仅由一个分隔符实例组成,则该数组由两个空字符串组成
'abcdef'.split('a'); //=>["", "bcdef"]
'abcdef'.split('f'); //=>["abcde", ""]
'abcdef'.split('abcdef');//=>["", ""]
• indexOf() 方法返回调用字符串对象中第一次出现的指定值的索引,开始在fromIndex进行搜索。如果
未找到该值,则返回-1
• 语法格式: str.indexOf(searchValue[, fromIndex]) • 参数:
• searchValue一个字符串表示被查找的值。
• fromIndex 可选表示调用该方法的字符串中开始查找的位置。可以是任意整数。默认值为 0 。如
果 fromIndex < 0 则查找整个字符串(如同传进了 0)。如果 fromIndex >=str.length,则
该方法返回 -1,除非被查找的字符串是一个空字符串,此时返回 str.length。
• 返回值:
• 指定值的第一次出现的索引; 如果没有找到 -1。
• 案例
"Blue Whale".indexOf("Blue"); // returns 0
"Blue Whale".indexOf("Blute"); // returns -1
"Blue Whale".indexOf("Whale", 0); // returns 5
"Blue Whale".indexOf("Whale", 5); // returns 5
"Blue Whale".indexOf("", 9); // returns 9
"Blue Whale".indexOf("", 10); // returns 10
"Blue Whale".indexOf("", 11); // returns 10
• lastIndexOf()跟indexOf方法类似。要查询的是最后一个字符。
4.字符串练习
• 截取字符串abcdefg的efg
• 请编写代码实现字符串逆序。至少2种方法。
• 判断一个字符串中出现次数最多的字符,统计这个次数
• 问题:
• 输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符。不可以使用replace
• <!--例如:输入“They are students” 和“aeiou”-->
• <!--则删除之后的第一个字符串变成 “Thy r stdnts”-->