String构造器可以使用new调用,也可以不使用,但是,这两种调用的结果也是完全不一样的。用new调用的时候,String作为构造器函数,创建字符串对象。不使用new的时候,String用作一个常规函数,将参数强制转为原始类型的字符串并且返回。字符串对象和字符串原始类型是不同的。你可以访问一个原始类型字符串的属性和方法,就像他是一个对象一样,但是你不可以往一个原始类型上面添加属性,虽然JavaScript引擎并不会报错,但是,你那样做是徒劳的,因为添加到原始类型上的属性是瞬间的,也就是说你添加了之后是获取不到的,永远都是undefined。实际上使用new来创建字符串对象是没有什么必要的,在项目中基本没有使用过。下面是一些字符串创建的例子:
//使用new创建字符串对象
var s1 = new String("hello");
console.log(typeof s1); //"object" //没有new,创建原始类型的字符串
var s2 = String("hello");
console.log(typeof s2); //"string" //最好是直接使用字面量的方法创建原始类型的字符串:
var s3 = "hello";
console.log(typeof s3); //"string" //可以调用原始类型的方法和属性:
console.log(s3.length); // //但是不可以往原始类型上面添加属性,即使不提示错误
s3.name = "fuck";
console.log(s3.name); //undefined
 
String.prototye原型上具有很多有用的方法,下面分别介绍一下:
 
字符串的基本操作方法:
var s = "JavaScript";
console.log(s.length); //
console.log(s.indexOf("a")); //
console.log(s.lastIndexOf("a")); //
console.log(s.charAt(0)); //"J"
console.log(s.charCodeAt(0)); //
console.log(s.toLowerCase()); //"javascript"
console.log(s.toLocaleLowerCase());
console.log(s.toUpperCase()); //"JAVASCRIPT"
console.log(s.toLocaleUpperCase()); //
s.concat(" rulz", "!"); //"JavaScript rulz!"
 
提取字符串:
slice(gegin, end);
substring(begin, end);
substr(begin, length);
slice和substring,他们用法相同,都是接受两个参数,分别是开始索引和结束索引。substr是非标准,它接受开始索引和截取长度。
var s = "JavaScript";
s.slice(4, 7); //'Scr'
s.substring(4, 7); //'Scr'
s.substr(4, 3); //'Scr'
 
字符串比较:
使用localCompare,如果两个参数相等,返回0;如果参数较小,返回整数(这意味着参数将会排序在最初的字符串之前);否则返回一个负数:
console.log("JavaScript".localeCompare("Java")); //
console.log("JavaScript".localeCompare("JavaScriptz")); //-1
console.log("JavaScript".localeCompare("JavaScript")); //
 
字符串转换转换成数组:
split根据一个分隔符字符串,将字符串分隔到一个数组里面,并且返回:
var s = "a,b,c";
console.log(s.split(",")); //["a", "b", "c"]
他还允许分隔符是一个正则表达式:
var s = "JavaScript";
console.log(s.split(/a/)); //["J", "v", "Script"]
正则表达式可解析随意分隔的CSV(comma-separated value,逗号隔开的值)数据。
如下例子中,因为逗号前后会有空格,但是我们不想要空格,如果我们直接使用逗号分隔的话,空格也会保留下来的,
var s = "a ,b ,c ";
console.log(s.split(",")); //["a ", "b ", "c "]
这时候,正则表达式就用上场了:
var s = "a ,b ,c ";
console.log(s.split(/\s*,\s*/)) //["a", "b", "c"]
字符串的搜索:
search方法接受一个参数,可以是字符串,也可以是正则表达式。如果,找到匹配结果,那么返回结果的索引(这点与indexOf有所不同),如果找不到,则返回-1:
var s = "JavaScript";
console.log(s.search(/ava/)); //
console.log(s.search("Java")); //
console.log(s.search("JavaEE")); //-1
console.log(s.search(/Script/)); //
 
字符串替换:
首先,replace接受需要查找的一个正则表达式,如下,我们需要把所有的a替换成@,这要用到g修饰符修饰正则表达式
var s = "JavaScript";
console.log(s.replace(/a/g, "@")); //"j@v@script"

如果,传递的是一个字符串,其内容会用作一个正则表达式的模式。但是,由于这个例子中,我们无法设置正则表达式模式的修饰符(如g,i,m),因此,只有一次会被替换:

var s = "JavaScript";
console.log(s.replace("a", "@")); //"j@vaScript"

这是常见的错误原因之一,即使你只想替换第一次出现,也总是使用正则表达式来搜索,这是好习惯。

 
replace方法是不可以接受数组,当需要替换多个字符串的时候,可以连缀调用,如要把所有的a替换成@,所有s替换成$:
var s = "JavaScript";
console.log(s.replace(/a/g, "@").replace(/s/gi, "$")); //J@v@$cript
replace强大之处在于,可以接受一个回调函数,而不是一个简单的字符串字面量作为替换。该回调函数有3个参数,分别是匹配、匹配的索引,以及最初输入的字符串,并且函数可以根据匹配进行有意义的或者带条件的替换,如下会使用html的实体代码来替换小写字母:
var ents = "JavaScript".replace(/[a-z]/g, function(match, index, input) {
//match是a,然后是v,接着是a,以此类推
//index是match的索引,1, 2, 3, 4, 5, 6...
//input是"JavaScript"
return "&#".concat(match.charCodeAt(0), ";");
}); console.log(ents); //JavaScript
match匹配:
用来匹配一个正则表达式模式,如下:
var s = "JavaScript";
console.log(s.match(/[A-Z]/)); //["J"]
console.log(s.match(/[A-Z]/g)) //["J", "S"]
当该正则表达式没有使用g修饰符的时候,该方法和正则表达式的exec方法工作方式相同:
console.log("string".match(/[a-z]/)); //["s"]
console.log(/[a-z]/.exec("string")); //["s"]
注意,当找不到匹配结果时,将会返回null,而不是空数组:
"string".match(/[0-9]/); //null
/[0-9]/.exec("string"); //null
 
 
 
 
 

JavaScript复习笔记——字符串的更多相关文章

  1. javascript复习笔记

    /* Javascript:用来在页面中编写特效,和HTML.CSS一样都是有浏览器解析 Javascript语言: 一.JS如何运行(javascript,jscript,vbscript,appl ...

  2. JavaScript复习笔记——数据类型

    1.undefined 使用var声明但未对其进行初始化时,这个变量的值就是undefined. 对未被初始化的值使用typeof会返回undefined值,而对未声明的变量执行typeof操作同样也 ...

  3. JavaScript 重点笔记

    JavaScript 重点笔记 ## 数组 // 必须掌握 - arr.length:获取数组元素的长度 - arr.splice(起始位置,长度):从数组中添加或删除元素. - arr.indexO ...

  4. angular复习笔记4-模板

    Angular复习笔记4-模板 简介 模板是一种自定义的标准化页面,通过模板和模板中的数据结合,可以生成各种各样的网页.在Angular中,模板的默认语言是HTML,几乎所有的HTML语法在模板中都是 ...

  5. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  6. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  7. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  8. JavaScript基础笔记二

    一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...

  9. JavaScript基础笔记一

    一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...

随机推荐

  1. break , continue , exit

    break , continue , exit 例一:#!/bin/bash . /etc/init.d/functions `;do ];then #continue #没有数字3 break #e ...

  2. APICloud全面支持WiFi真机同步和实时预览功能

    APICloud工具插件包括APICloud Studio.Sublime Text和Webstorm全面为开发者提供iOS和Android平台真机同步调试功能,不仅可以通过USB方式进行APP真机同 ...

  3. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  4. PHP受保护的类和私有类什么区别

    受保护的继承后可以访问,私有的只能在该类中访问,不会被继承访问class Man{ protected $name='lee';//受保护 private $age=123;//私有 function ...

  5. Vue.2.0.5-过渡状态

    过渡状态 Vue 的过渡系统提供了非常多简单的方法设置进入.离开和列表的动效.那么对于数据元素本身的动效呢,比如: 数字和运算 颜色的显示 SVG 节点的位置 元素的大小和其他的属性 所有的原始数字都 ...

  6. 解决:warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;找到 MSIL .netmodule 或使用 /GL 编译的模块;正在。。;LINK : warning LNK4075: 忽略“/INCREMENTAL”(由于“/LTCG”规范)

    参考资料: http://blog.csdn.net/laogaoav/article/details/8544880 http://stackoverflow.com/questions/18612 ...

  7. 第8章 委托、Lamdba表达式和事件

    本章内容: 委托    Lambda表达式 事件 8.1.3   简单的委托示例 首先定义一个类MathOperations,它有两个静态方法,对double类型的值执行两个操作. public cl ...

  8. ali面试点滴

    1.喜欢问原理 最好问2句 回答8句 把相关的知识也加上 最好说一下优势与区别 2.sql优化 分库 分表 ssl https 3.jvm.高并发(事务.原子操作).设计模式(一定要烂熟于心) 4.访 ...

  9. java Double封装类的对象保留两位小数

    double value = 22.365454; DecimalFormat df = new DecimalFormat("##.00");value = Double.par ...

  10. Java基础之读文件——从文件中读取文本(ReadAString)

    控制台程序,使用通道从缓冲区获取数据,读取Java基础之写文件(BufferStateTrace)写入的charData.txt import java.nio.file.*; import java ...