js中 substr(), substring(), slice()的区别

一、作用

  三者都是基于原字符串创建新字符串的方法。

  接收一到两个参数,第一个参数截取字符串的开始位置(字符下标,从0开始),第二个参数因方法不同而不同,后面不同点会说到。

  另外,三个方法都不会修改原字符串的值。

二、相同点

  • 都可以传入一个或两个参数
  • 只传入一个参数时,都表示从指定下标,截取字符串长度,直到字符串最后一个字符
var str = ‘hello sarahshine!‘;

console.log(str.slice(3));          // ‘lo sarahshine!‘
console.log(str.substring(3));      // ‘lo sarahshine!‘
console.log(str.subtr(3));          // ‘lo sarahshine!‘

三、不同点

2.1   传入两个参数时,第二个参数代表的意义不同

  • slice ( ) 和 substring ( ) 的第二个参数,都表示截取字符串的结束位置
  • substr ( ) 的第二个参数代表的是,要截取的字符串位数
var str = ‘hello sarahshine!‘;

console.log(str.slice(3,7));           // ‘lo s‘
console.log(str.substring(3,7));       // ‘lo s‘
console.log(str.substr(3,7));          // ‘lo sara‘

2.2  传入的参数是负数

  • slice ( )  会把所有的负数参数加上字符串的长度值,如:str.slice(-3)   相当于 str.slice(14)
  • substring ( ) 会把所有的负数参数都转为0
  • substr ( ) 会把第一个参数的负值加上字符串的长度值,第二个参数的负值转为0   (毕竟第二个参数是要截取的字符串长度,总不能为负数吧)
var str = ‘hello sarahshine!‘;  //length = 17

//只传入一个负数
console.log(str.slice(-3));     // ‘ne!‘                相当于str.slice(14)
console.log(str.substring(-3)); // ‘hello sarahshine!‘  相当于str.substring(0)
console.log(str.substr(-3));    // ‘ne!‘                相当于str.substr(14)

//传入两个负数
console.log(str.slice(-3, -1));     // ‘ne‘          相当于str.slice(14,16)
console.log(str.substring(-3, -1)); // ‘‘            相当于str.substring(0,0)
console.log(str.substr(-3, -1));    // ‘‘            相当于str.substr(14,0)

//传入一正一负
console.log(str.slice(3, -4));     // ‘lo sarahsh‘   相当于str.slice(3,13)
console.log(str.substring(3, -4)); // ‘hel‘          相当于str.substring(3,0)  即(0,3)
console.log(str.substr(3, -4));    // ‘‘             相当于str.substr(3,0)

以上都出自《javascript高级程序设计》

时间: 2024-07-30 20:30:13

js中 substr(), substring(), slice()的区别的相关文章

js中substr,substring,indexOf,lastIndexOf,split等的用法

1.substr substr(start,length)表示从start位置开始,截取length长度的字符串. var src="images/off_1.png";alert(src.substr(7,3)); 弹出值为:off 2.substring substring(start,end)表示从start到end之间的字符串,包括start位置的字符但是不包括end位置的字符. var src="images/off_1.png";alert(src.su

js中substr,substring,indexOf,lastIndexOf等的用法

1.substrsubstr(start,length)表示从start位置开始,截取length长度的字符串. var src="images/off_1.png";alert(src.substr(7,3)); 弹出值为:off 2.substringsubstring(start,end)表示从start到end之间的字符串,包括start位置的字符但是不包括end位置的字符. var src="images/off_1.png";alert(src.subs

js中substr,substring,indexOf,lastIndexOf,split 的用法

1.substr substr(start,length)表示从start位置开始,截取length长度的字符串. var src="images/off_1.png";alert(src.substr(7,3)); 弹出值为:off 2.substring substring(start,end)表示从start到end之间的字符串,包括start位置的字符但是不包括end位置的字符. var src="images/off_1.png";alert(src.su

js中substr,substring,indexOf,lastIndexOf,split用法

1.substr substr(start,length)表示从start位置开始,截取length长度的字符串. var src="images/off_1.png"; alert(src.substr(7,3)); 弹出值为:off 2.substring substring(start,end)表示从start到end之间的字符串,包括start位置的字符但是不包括end位置的字符. var src="images/off_1.png"; alert(src.

JS中substr与substring的区别

js中substr和substring都是截取字符串中子串,非常相近,可以有一个或两个参数. 语法:substr(start [,length]) 第一个字符的索引是0,start必选 length可选 substring(start [, end]) 第一个字符的索引是0,start必选 end可选 相同点:当有一个参数时,两者的功能是一样的,返回从start指定的位置直到字符串结束的子串 var str = "hello Tony"; str.substr(6);  //Tony

JS中深拷贝与浅拷贝的区别,实现深拷贝的几种方法

JS中深拷贝与浅拷贝的区别,实现深拷贝的几种方法 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力. 此篇文章中也会简单阐述到栈堆,基本数据类型与引用数据类型,因为这些概念能更好的让你理解深拷贝与浅拷贝. 我们来举个浅拷贝例子: let a=[0,1,2,3,4], b=a; console.log(a===b); a[0]=1; console.log(a,b); 嗯?明明b复

JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别

JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的原型链中,是则返回true,否则返回false. 格式如下: object1.isPrototypeOf(object2); object1是一个对象的实例: object2是另一个将要检查其原型链的对象. 原型链可以用来在同一个对象类型的不同实例之间共享功能. 如果 object2 的原型链中包含

Angular.js 中 copy 赋值与 = 赋值 区别

转自st.gg Angular.js 中 copy 赋值与 = 赋值 区别 为什么用 $scope.user = $scope.master; $scope.master 会跟着 $scope.user 改变?angular.copy 和 = 号赋值有什么区别呢?新手还没有搞懂,请教各位了. <!DOCTYPE html> <html> <script src= "http://apps.bdimg.com/libs/angular.js/1.3.9/angular

浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

var num = 1;    var str = '1';    var test = 1;    test == num  //true 相同类型 相同值    test === num //true 相同类型 相同值    test !== num //false test与num类型相同,其值也相同, 非运算肯定是false    num == str  //true 把str转换为数字,检查其是否相等.    num != str  //false == 的 非运算    num ==