实现vara=add(2)(3)(4);//9第一种方法:functionadd(a){vartemp=function(b){returnadd(a+b);}temp.valueOf=function(){返回一个;}returntemp;}varresult=add(2)(3)(4);console.log(result);第二种方法:functionadd(){varargs=Array.prototype.slice.call(arguments);varfn=function(){varfnArgs=Array.prototype.slice.call(参数);返回add.apply(null,args.concat(fnArgs));}fn.valueOf=function(){returnargs.reduce(function(a,b){returna+b;})}returnfn;}varresult=add(2)(3)(4);控制台。日志(结果);第三种方式letadd=(...a)=>{lethelper=(...b)=>{returnadd(...[...a,...b]);};helper.valueOf=()=>{让总和=0;for(letitemofa){sum+=item;}返回总和;}returnhelper;};varresult=add(2)(3)(4);控制台日志(结果);第四种方式:functionadd(num){num+=~~add;添加.num=num;返回添加;}add.valueOf=function(){returnadd.num;}varresult=add(2)(3)(4);控制台日志(结果);这里需要说明的是:String类型的toString方法需要存在并返回原类型,那么如果返回的不是原始类型,就会继续寻找对象的valueOf方法函数类型转换:类似toNumber转换,如果函数的valueOf方法返回的是非原始类型,则继续寻找其toString方法。判断是否为数组if(typeofArray.isArray==="undefined"){Array.isArray=function(arg){returnObject.prototype.toString.call(arg)==="[对象数组]"};}解释代码vara;alert(typeofa);//undefinedUndefined是一种只有一个值的数据类型,这个值是“undefined”。值为undefinedalert(b);//会报错,因为没有声明varc=null;alert(typeofc);//objectnull是一种只有一个值的数据类型,这个值为null代表一个空指针对象,所以typeof测试会返回“object”[]==false;//真[]==![];//true尝试将Object转换为number或string,依赖于另一种比较类型实现随机选择10--100之间的10个数字,存入数组,排序variArray=[];functiongetRandom(istart,iend){//选择的区间variChoice=iend-istart+1;//乘以区间并加上起始位returnMath.floor(Math.random()*iChoice+istart);}for(vari=0;i<10;i++){iArray.push(getRandom(0,200)));}iArray.sort(function(a,b){returna-b;});arguments,callee,callerarguments.length为实参个数functioninner(){console.log(arguments.callee);//--callee放回正在执行的函数的引用指向拥有arguments对象的函数,即inner()console.log(arguments.callee.caller);//--这里是callee.caller。该属性保存着当前函数的调用引用,即outer()console.log(inner.caller);//[Function:outer]}functionouter(){inner();}outer();//在严格模式下,不允许访问arguments.callee和arguments.caller属性'usestrict';//两次都是1voidfunctionfn(a){console.log(arguments[0]);//1a=2;console.log(arguments[0]);//1}(1);查找数组中的最大值//第一种方法vara=[1,2,3,6,5,4];varmax=Math.max.apply(null,a);console.log(max);//第二种方法vara=[1,2,3,6,5,4];varmax=eval('Math.max('+a.toString()+')');console.log(max);斐波那契数列函数*fib(n){let[a,b]=[1,1];while(n--){产生一个;[a,b]=[b,a+b];}}for(letitemoffib(5)){控制台。log(item);}判断字符串中出现次数最多的字符,统计出现次数vars='aaabbbcccaaabbbaaabbbbbbbbbbb';vara=s.split('');a.sort();//排序后,它变成["a","a","a","a","a","a","a","a","a","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","b","c","c","c"]s=a.join('');varpattern=/(\w)\1*/g;//正则表达式中的括号"()”表示分组。如果其后出现\1,则表示与第一个括号中要匹配的内容相同。//注意:\1必须和括号一起使用varans=s.match(pattern);//ans变成["aaaaaaaaa","bbbbbbbbbbbbbbbb","ccc"]ans.sort(function(a,b){returna.length
