扩展2:字符串转化为数组

1、.split('')

const myFavShow = 'The Office';
const myFavShowArray = myFavShow.split('');
console.log(myFavShowArray) //['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e']

split还可以用字符或空格分隔字符串  

使用(‘  ’)分割

const myFavShow = 'The Office';
const myFavShowArray = myFavShow.split(' ');
console.log(myFavShowArray) //['The', 'Office']

使用(‘-’) 分割

const favDialogue = 'Thats-what-she-said';
const favDialogueArr = favDialogue.split('-');
console.log(favDialogueArr) //['Thats', 'what', 'she', 'said']

2、扩展运算符

扩展运算符(spread),功能是把数组或类数组对象展开成一系列用逗号隔开的值

剩余运算符(rest),不过其功能与扩展运算符恰好相反,把逗号隔开的值序列组合成一个数组

当三个在等号右边,或者放在实参上,是 spread运算符

当三个点(…)在等号左边,或者放在形参上,为 rest 运算符

比如说【扩展运算符spread】

//合并数组
var arr1 = [1,2,3];
var arr2 = [...arr1, 4, 5, 6];
console.log(arr2); // [1, 2, 3, 4, 5, 6]

//字符串转数组
var str = 'hello';
var arr3 = [...str];
console.log(arr3); // ["h", "e", "l", "l", "o"]

【剩余运算符】 

//参数个数不确定时,用 rest运算符
function f1(...args) {
  console.log(args); // [1,2,3]
}
f1(1,2,3);

//参数个数不确定时的第二种情况
function f2(item, ...arr) {
  console.log(item); // 1
  console.log(arr);  // [2,3]
}
f2(1, 2, 3);

//rest运算符配合 解构使用
let [a,...temp]=[1, 2, 4];
console.log(a);    // 1
console.log(temp); // [2,4]

通过扩展运算符转化为数组:

const myFavShow = 'The Office'

const myFavShowArray = [...myFavShow]

console.log(myFavShowArray) 
// ['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e']

消除了在 split() 中的限制也有帮助,考虑下面的例子,我们可以使用这种方法轻松拆分任何字符 

const animal = '    '
const animalArr = [...animal]
console.log(animalArr) // ['  ', '  ']

3、使用 Array.from(str)

from() 方法从可迭代或类似数组的对象创建一个新的、浅拷贝的 Array 实例

const myFavShow = 'The Office'

const myFavShowArray = Array.from(myFavShow);

console.log(myFavShowArray) 
// ['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e']

4、使用 Array.prototype.slice.call('string')

const favShow = Array.prototype.slice.call("The Office!");
console.log(favShow); //['T', 'h', 'e', ' ', 'O', 'f', 'f', 'i', 'c', 'e', '!']

5、for循环、array.push

const s = 'the office';
const a = [];
for (const s2 of s) {
   a.push(s2);
}
console.log(a); // ['t', 'h', 'e', ' ', 'o', 'f', 'f', 'i', 'c', 'e']

slice()、splice()、Array.prototype.slice.call()区别

slice(start,end):

返回一个新数组,包含从start到end(不包含该元素)的数组元素

注意:该方法不会改变原数组,而是返回一个子数组,如果想删除数组中的一段元素,应该使用Array.splice()方法

var arr = [1,2,3,4,5];
console.log(arr.slice(1));//[2,3,4,5]  
console.log(arr.slice(1,3))//[2,3]  
console.log(arr); //[1,2,3,4,5]

 同时slice(start,end)可以作用于字符串的切割

var str = "Hello,world!";
var sliceStr = str.slice(1,5);//ello 
var subStr = str.substring(1,5);//ello
var subStr = str.substr(1,5);//ello,
var str = "1000000";
var sliceStr = str.slice(-3);//000  从序列号为-3的位置到最后

splice(index,howmany,item1,…itemX)

该方法向或者从数组中添加或者删除项目,返回被删除的项目。(该方法会改变原数组

  • index参数:必须,整数,规定添加或者删除的位置,使用负数,从数组尾部规定位置。
  • howmany参数:必须,要删除的数量,如果为0,则不删除项目。
  • tem1,…itemX参数:可选,向数组添加的新项目。
var arr = [1,2,3,4,5];
console.log(arr.splice(2,1,"hello"));//[3]  返回的新数组
console.log(arr);//[1, 2, "hello", 4, 5]  改变了原数组

 Array.prototype.slice.call()

能将具有length属性的对象转成数组,除了IE下的节点集合

  • slice:用来截取截取字符串方法
  • Array: javascript的一个引用类型,其原型prototype上有一个方法叫slice
  • call和apply : 用来改变对象中函数内部的this引用,使得函数可以随便换‘妈妈’

第一个参数是context(就是上下文的意思),用来替换对象函数中的this
第二个参数是传递给对象函数的参数

function test(a,b,c,d) 
   { 
      var arg = Array.prototype.slice.call(arguments,1); 
      alert(arg); 
   } 
   test("a","b","c","d"); //b,c,d

Array.prototype.slice.call(arguments, 1)可以理解成是让arguments转换成一个数组对象,让arguments具有slice()方法。要是直接写arguments.slice(1)会报错,原因 auguments是类数组,不是数组。arguments 是object 不是Array ,原型上没有slice方法

注意:类数组对象,什么叫类数组对象,就是一个对象必须有length属性,没有length,转出来的就是空数组。

var a={length:2,0:'first',1:'second'};
//类数组,有length属性,长度为2,第0个是first,第1个是second
console.log(Array.prototype.slice.call(a,0));
// ["first", "second"],调用数组的slice(0);因为第二个参数没有指定,默认到最后一个

var a={length:2,0:'first',1:'second'};
console.log(Array.prototype.slice.call(a,1));//["second"],调用数组的slice(1);

var a={0:'first',1:'second'};//去掉length属性,返回一个空数组
console.log(Array.prototype.slice.call(a,0));//[]

function test(){
  console.log(Array.prototype.slice.call(arguments,0));//["a", "b", "c"]
  console.log(Array.prototype.slice.call(arguments,1));//["b", "c"]
}
test("a","b","c");

将函数的实际参数转换成数组的方法 

var args = Array.prototype.slice.call(arguments);
var args = []; 
for (var i = 1; i < arguments.length; i++) { 
    args.push(arguments[i]);
}
var toArray = function(s){
    try{
        return Array.prototype.slice.call(s);
    } catch(e){
        var arr = [];
        for(var i = 0,len = s.length; i < len; i++){
            //arr.push(s[i]);
               arr[i] = s[i];  //据说这样比push快
        }
         return arr;
    }
}

throw语句用来抛出一个用户自定义的异常。当前函数的执行将被停止(throw之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个catch块。如果调用者函数中没有catch块,程序将会终止。


扩展:substring和substr的区别 

截取字符串

相同点:如果只是写一个参数,两者的作用都一样:都是是截取字符串从当前下标以后直到字符串最后的字符串片段。

var str = '123456789';
console.log(str.substr(2));    //  "3456789"
console.log(str.substring(2)) ;//  "3456789"

不同点第二个参数

substr(startIndex,lenth): 第二个参数是截取字符串的长度(从起始点截取某个长度的字符串);

substring(startIndex, endIndex): 第二个参数是截取字符串最终的下标 (截取2个位置之间的字符串,‘含头不含尾’)。

console.log("123456789".substr(2,5));    //  "34567"
console.log("123456789".substring(2,5)) ;//  "345"

JavaScript 错误 - throw、try 和 catch 

try 和 catch,语句 try 和 catch 是成对出现的

try {
    ...    //异常的抛出
} catch(e) {
    ...    //异常的捕获与处理
} finally {
    ...    //结束处理
}

Throw 语句,允许我们创建自定义错误

如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。

function myFunction() {
    var message, x;
    message = document.getElementById("message");
    message.innerHTML = "";
    x = document.getElementById("demo").value;

    try { 
        if(x == "")  throw "值为空";
        if(isNaN(x)) throw "不是数字";
        x = Number(x);
        if(x < 5)    throw "太小";
        if(x > 10)   throw "太大";
    }
    catch(err) {
        message.innerHTML = "错误: " + err;
    }
}

 

六种在 JavaScript 中将字符串转换为数组的方法_七包辣条的博客-CSDN博客_js将字符串转换为数组

slice()、splice()、Array.prototype.slice.call()区别_投机者的终结者的博客-CSDN博客_slice 并非 array 的原型方法

substring和substr的区别_李天下xue的博客-CSDN博客_substring和substr的区别

 JavaScript 错误 – Throw、Try 和 Catch | 菜鸟教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值