当参数相同时,返回结果是否相同
slice()substring()substr()单正参✅✅✅单负参✅❌(负参转换为 0,返回全字符串)✅双正参✅✅❌双负参✅null(负参转换为 0,返回空字符串)null(第二参不能为负参,转换为 0,返回空字符串)左正右负✅❌(负参转换为 0)null(第二参不能为负参,转换为 0,返回空字符串)左负右正null(左参 > 右参,返回空字符串)✅❌
左参能否大于右参
slice()substring()substr()❌✅✅当左参大于右参时,返回空字符串当左参大于右参时,颠倒参数位置即:substring(10, 5) => substring(5, 10)左参为下标,右参为长度,两者不冲突
文章目录
测试字符串提取相同片段(参数对比)设置相同参数(结果对比)单负参 (-6)双正参 (6, 10)双负参 (-10, -5)左正右负 (5, -10)左负右正 (-10, 5)
同参同结果单正参
常见应用场景:JSON格式字符串数据去除花括号
测试字符串
var str = “Hello_World!_I’_love_JavaScript!”;
下划线占用空格,便于观察对比。字符串长度为32。
提取相同片段(参数对比)
PS:
1.提取
'World!_I'_love' 片段,长度:
14
2.
W 为第
7 个字符,下标:
6
e 为第
20 个字符,下标:
19
slice(6, 20):提取下标 6 (含)至下标 20 (不含)之间的字符
数学区间表示:[6,20)左开右闭区间substring(6, 20):提取下标 6 (含)至下标 20 (不含)之间的字符
数学区间表示:[6,20)左开右闭区间【同 slice()】substr(6, 14):提取从下标 6 开始算的14个字符
数学区间表示:第二个参数表示的是需要截取的长度,所以无法区间表示
设置相同参数(结果对比)
单负参 (-6)
slice(-6):等同于:slice(str.length-6)等同于:slice(str.length-6, str.length)提取下标 str.length-6 (含) 至最末下标之间的字符
数学区间表示:[str.length-6,str.length)左开右闭区间
substring(-6):注意:不支持负参,会自动将负参转换成 0!等同于:substring(0)等同于:substring(0, string.length)substr(-6):等同于:substr(str.length-6)
等同于:substr(str.length-6, 6)提取从下标 6 开始算,剩余的字符
注意:虽然 substr(str.length-6, str.length) 也能取得相同结果,但是,它第二个参数主要指定的是需要截取的长度而不是字符串下标!
双正参 (6, 10)
slice(6, 10):提取下标 6 (含)至下标 10 (不含)之间的字符
数学区间表示:[6,10)左开右闭区间substring(6, 10):提取下标 6 (含)至下标 10 (不含)之间的字符
数学区间表示:[6,10)左开右闭区间【同 slice()】
substr(6, 10):提取从下标 6 开始算的10个字符
数学区间表示:第二个参数表示的是需要截取的长度,所以无法区间表示
双负参 (-10, -5)
slice(-10, -5):等同于:slice(str.length-10, str.length-5)
注意:第二个参数,不能小于第一个参数substring(-10, -5):注意:不支持负参,会自动将负参转换成 0!等同于:substring(0, 0)
substr(-10, -5):注意:无效,第二参为长度,不支持负数,自动转换成 0!等同于:substr(-10, 0)【0长度,所以为空】等同于:substr(str.length-10, 0)
左正右负 (5, -10)
slice(5, -10):等同于:slice(5, str.length-10)str.length-10 = 32-10 = 22;左参 < 右参,所以可以当 左参 > 右参 时
(无效)substring(5, -10):等同于:substring(5, 0)【可逆向】等同于:substring(0, 5)substr(5, -10):
注意:无效,第二参为长度,不支持负数,自动转换成 0!等同于:substr(5, 0)【0长度,所以为空】
左负右正 (-10, 5)
slice(-10, 5):等同于:slice(str.length-10, 5),左参比右参大,无效除非左参比右参小(32-10=22;右参 > 22)
substring(-10, 5):注意:负参无效化,自动将负参转换成 0。等同于:substring(0, 5)substr(-10, 5):等同于:substr(str.length-10, 5)
因为第一个参数是下标,所以可为负参
同参同结果
单正参
slice(6):等同于:slice(6, str.length)
数学区间表示:[6,str.length)substring(6):等同于:substring(6, str.length)
数学区间表示:[6,str.length)substr(6):等同于:substr(6, 26)
注意:虽然 substr(6, str.length) 也能取得相同结果,但是,它第二个参数主要指定的是需要截取的长度而不是字符串下标!
常见应用场景:JSON格式字符串数据去除花括号
slice(1, str.length-1):substring(1, str.length-1):
substr(1, str.length-2):