sort()

var arr = [9,5,6,7,4,8,1, 'a', '喜', 2, 'b', '欢', 3, 'c', '你']
var length=arr.length
var a,b,bigger
for (var j = 0; j < length; j++){
for (var i = 0; i < length -1; i++) {
if(typeof (arr[i]) == 'string'){
a = arr[i].charCodeAt()
}else{
a = arr[i]
}
if(typeof (arr[i+1]) == 'string'){
b = arr[i+1].charCodeAt()
}else{
b = arr[i+1]
}
if (a > b) {
bigger = arr[i]
arr[i] = arr[i+1]
arr[i+1] = bigger
}
}
}
console.log(arr)
            
  var arr=[9,8,7,6,5,4,3,2,1,15,20];
var len=arr.length;
console.log(arr.join(","));
var newarr=[];
for(var i=0;i<len;i++){
newarr.push(Math.min.apply(this,arr));
arr.splice(r(arr,Math.min.apply(this,arr)),1);
}
// “变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。
function r(s,v){
for(k in s){
if(s[k] == v){
return k;
}
}
}
console.log(newarr)
 
 
作者:杨志
链接:https://www.zhihu.com/question/20289071/answer/14644278
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

LZ要先明白存在call和apply的原因,才能记得牢一点:
在javascript OOP中,我们经常会这样定义:
function cat(){
}
cat.prototype={
food:"fish",
say: function(){
alert("I love "+this.food);
}
}


var blackCat = new cat;
blackCat.say();

但是如果我们有一个对象whiteDog = {food:"bone"},我们不想对它重新定义say方法,那么我们可以通过call或apply用blackCat的say方法:blackCat.say.call(whiteDog);

所以,可以看出call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。

用的比较多的,通过document.getElementsByTagName选择的dom 节点是一种类似array的array。它不能应用Array下的push,pop等方法。我们可以通过:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
这样domNodes就可以应用Array下的所有方法了。

原文地址:https://www.cnblogs.com/xfcao/p/8315870.html