js问题,为什么这样写join不起作用?
var str = "welcome to beijing";
var arr = str.split(" ", 3);
arr.reverse();
arr.join(" ");
alert(arr)
为什么必须得把join赋给一个值alert(arr)才起作用,为什么reverse不用这样赋值?
reverse()用于颠倒数组中的元素,这个方法会直接在原数组上操作,比如 var a=[1,2,3,4],那么a.severse()后a数组就直接变成了[4,3,2,1]。但是join()不会对原数组进行操作,也就是不会去改变原数组,jion()方法是将数组转为字符串,如果说直接对原数组操作,那么我刚刚例子里的a就不是一个数组,而是一个字符串,那么如果我在后续的操作中还需要a是一个数组就需要将a从字符串转为一个数组,这样就会变得很繁琐,如果不对原数组进行直接操作,而是返回一个新数组,那么我只需要在场景需要时转变一下就好,不会影响之后我对该数组的操作,很方便。
有的 函数会返回一个新结果,有的函数是修改原来的元素
你应该学习一下基础数据类型和引用类型的区别
join()是数组的函数,但他返回的是却是一个字符串类型的变量,而不是数组类型的变量,而reverse()返回的同样是数组类型。
尽管js的类型是可以动态改变的,但调用一个改变自身数据类型的函数无疑是可怕的。
举个例子:
var now = new Date();
console.log("当前日期是:" + now.toDateString());
console.log("当前时间是:" + now.toTimeString());
toDateString()是Date类型的一个函数,他输出的是一个字符串变量,但如果他直接改变自身的数据类型,把自身,也就是now这个变量也变成一个字符串,相当于执行了now = now.toDateString(),那下面的toTimeString()就没法执行了,因为字符串类型没有toTimeString()这个函数。
改变自身值是很自然的,但自身数据类型的行为是破坏性的,通俗的说就像一个杯子(变量),无论是使用这个杯子的功能(调用函数),还是倒入咖啡或是泡上茶叶(改变变量的值),都是合理,自然的行为。但如果这个杯子有这样一个函数:端起杯子,杯子就会变成一个茶壶,并且再也不会复原回杯子,那这个行为就非常怪异了,是不合情理的,这只能是魔法了。