循环中对数组字符串执行slice时出现undefined错误,请求调试
问题分析与解决:Cannot read property 'slice' of undefined in loop
我一眼就揪出问题啦!你遇到的错误完全是循环条件写错导致的,咱们一步步拆解来看:
错误原因
你的数组Arr长度是2,而数组的索引是从0开始的,所以有效的索引只有0和1。但你的循环条件写的是i <= Arr.length——当i等于2的时候(因为Arr.length是2),循环还会执行一次,这时候Arr[2]是undefined,自然没法调用slice方法,直接就抛出了那个报错。而你单独测试Arr[0]的时候,访问的是有效索引,所以完全没问题。
修正后的代码
只需要把循环条件里的<=改成<,让循环只遍历到最后一个有效索引就停止:
var Arr = ['2018-08-03 11:00:00', '2017-07-03 03:30:00']; console.log('length of Arr: ', Arr.length); console.log('string testing: ', Arr[0]); var testing = Arr[0].slice(0,-3); console.log('slice testing :', testing); var chunks = []; // 把 <= 改为 <,避免访问不存在的索引 for (var i = 0; i < Arr.length; i++) { chunks.push(Arr[i].slice(0,-3)); }; console.log('chunks: ', chunks);
额外优化建议
现代JavaScript里更推荐用let/const代替var,避免变量提升带来的潜在问题;另外用数组的map方法可以让代码更简洁:
const Arr = ['2018-08-03 11:00:00', '2017-07-03 03:30:00']; console.log('length of Arr: ', Arr.length); console.log('string testing: ', Arr[0]); const testing = Arr[0].slice(0,-3); console.log('slice testing :', testing); // 用map一步完成数组转换 const chunks = Arr.map(str => str.slice(0, -3)); console.log('chunks: ', chunks);
内容的提问来源于stack exchange,提问作者lovemyjob




