Maison > interface Web > js tutoriel > Application d'appel et candidature en javascript

Application d'appel et candidature en javascript

php中世界最好的语言
Libérer: 2018-03-14 13:30:03
original
1449 Les gens l'ont consulté

Cette fois, je vais vous apporter l'application d'appel et postuler en javascript Quelles sont les précautions pour l'application d'appel et postuler en javascript. Ce qui suit est un cas pratique. . Jetons un coup d'oeil.

Trouver les valeurs maximales et minimales du tableau

Définir un tableau :

var ary = [23, 34, 24, 12, 35, 36, 14, 25];
Copier après la connexion

Méthode de tri puis de valeur

Donnez d'abord Le tableau est trié (petit -> grand), le premier et le dernier sont les valeurs minimales et maximales que nous voulons.

var ary = [23, 34, 24, 12, 35, 36, 14, 25];
ary.sort(function (a, b) {
    return a - b;
});var min = ary[0];var max = ary[ary.length - 1];
console.log(min, max);1234567
Copier après la connexion

Méthode d'hypothèse

Supposons que la première valeur du tableau actuel est la valeur maximale, puis comparez cette valeur avec les éléments suivants un par un si l'une de ces dernières valeurs. ​​est meilleur que la valeur supposée Il faut encore la taper, indiquant que l'hypothèse est fausse, nous remplaçons la valeur supposée...

var max = ary[0], min = ary[0];for (var i = 1; i < ary.length; i++) {
    var cur = ary[i];
    cur > max ? max = cur : null;
    cur < min ? min = cur : null;
}
console.log(min, max);1234567
Copier après la connexion

La méthode max/min en Math est implémentée (via appliquer )

Utilisez Math directement. min

var min = Math.min(ary); 
console.log(min); // NaN 
console.log(Math.min(23, 34, 24, 12, 35, 36, 14, 25));
Copier après la connexion

Lorsque vous utilisez Math.min directement, vous devez transmettre la pile de nombres à comparer un par un, afin d'obtenir le résultat final. démérite Il n'est pas possible de mettre un tableau ary à la fois.

Essayez : utilisez eval

var max = eval(“Math.max(” + ary.toString() + “)”); 
console.log(max); 
var min = eval(“Math.min(” + ary.toString() + “)”); 
console.log(min); 
“Math.max(” + ary.toString() + “)” –> “Math.max(23,34,24,12,35,36,14,25)”
Copier après la connexion

Ne vous inquiétez de rien d'autre d'abord, changez d'abord le dernier code que nous voulons exécuter en String, et puis la valeur de chaque élément du tableau est fusionnée séparément dans cette chaîne.

eval : Convertir une chaîne en une expression JavaScript pour exécution
Par exemple : eval(“12+23+34+45”) // 114

Appel via apply max/min en Math

var max = Math.max.apply(null, ary); 
var min = Math.min.apply(null, ary); 
console.log(min, max);
Copier après la connexion

En mode non strict, lorsque le premier paramètre à appliquer est nul, celui-ci en max/min sera pointé vers window, puis le paramètre de ary sera passé à maximum/min.

Calculez la moyenne

Maintenant, simulez une scène et organisez une certaine compétition. Après que les juges ont noté, ils doivent supprimer le score le plus élevé et le score le plus bas, ainsi que la moyenne des. les scores restants sont pour le score final.

Peut-être que de nombreux étudiants penseront à écrire une méthode pour recevoir tous les scores, puis utiliseront les arguments d'attribut intégrés de la fonction pour trier les arguments en appelant la méthode de tri, et puis..., mais il convient de noter que les arguments ne sont pas Un véritable objet tableau n'est qu'une collection de pseudo-tableaux, donc appeler directement la méthode de tri avec des arguments signalera une erreur :

arguments.sort(); // Uncaught TypeError: arguments.sort is not a function
Copier après la connexion


Donc à ce moment , pouvez-vous d'abord convertir les arguments en un véritable tableau ? J'ai découvert qu'il y avait une étape dans la méthode avgFn que nous avons implémentée. Les arguments sont clonés et générés dans un tableau. Si vous êtes familier avec la méthode slice des tableaux, vous pouvez savoir que lorsqu'aucun paramètre n'est passé à la méthode slice, le tableau actuel est cloné, ce qui peut être simulé comme :

function avgFn() {
    // 1、将类数组转换为数组:把arguments克隆一份一模一样的数组出来
    var ary = [];    for (var i = 0; i < arguments.length; i++) {
        ary[ary.length] = arguments[i];
    }    // 2、给数组排序,去掉开头和结尾,剩下的求平均数
    ary.sort(function (a, b) {
        return a - b;
    });
    ary.shift();
    ary.pop();    return (eval(ary.join(&#39;+&#39;)) / ary.length).toFixed(2);
}var res = avgFn(9.8, 9.7, 10, 9.9, 9.0, 9.8, 3.0);
console.log(res);1234567891011121314151617
Copier après la connexion
Donc dans avgFn méthode, les arguments sont convertis. Pour les opérations sur les tableaux, vous pouvez emprunter la méthode slice dans Array via la méthode d'appel.

function mySlice () {
    // this->当前要操作的这个数组ary
    var ary = [];    for (var i = 0; i < this.length; i++) {
        ary[ary.length] = this[i];
    }    return ary;
};var ary = [12, 23, 34];var newAry = mySlice(ary);
console.log(newAry);1234567891011
Copier après la connexion
Notre approche actuelle consiste à convertir d'abord les arguments en tableau, puis à exploiter le tableau converti. Alors, pouvons-nous simplement utiliser les arguments directement au lieu de les convertir d'abord en tableau ? Bien sûr, c'est possible, en appelant pour emprunter la méthode array.

function avgFn() { // 1、将类数组转换为数组:把arguments克隆一份一模一样的数组出来 // var ary = Array.prototype.slice.call(arguments); var ary = [].slice.call(arguments);
// 2、给数组排序,去掉开头和结尾,剩下的求平均数....123
}
Copier après la connexion

Convertir un objet de type tableau en tableau

J'ai déjà mentionné que la méthode slice d'emprunt de tableau est utilisée pour convertir un objet de type tableau en tableau, puis via
function avgFn() {
    Array.prototype.sort.call(arguments , function (a, b) {
        return a - b;
    });
    [].shift.call(arguments);
    [].pop.call(arguments);    return (eval([].join.call(arguments, &#39;+&#39;)) / arguments.length).toFixed(2);
}var res = avgFn(9.8, 9.7, 10, 9.9, 9.0, 9.8, 3.0);
console.log(res);123456789101112
Copier après la connexion
getElementsByTagName

etc. L'objet de type tableau obtenu par la méthode peut-il également être converti en objet tableau à l'aide de la méthode slice ?

var oLis = document.getElementsByTagName('div'); var ary = Array.prototype.slice.call(oLis); Il peut en effet être utilisé de cette manière sous le navigateur, mais ce sera un drame sous IE6~8, et une erreur sera rapportée :

SCRIPT5014 : Array.prototype.slice : 'this' is not a Objet JavaScript (rapport d'erreur)

Ensuite sous IE6~8, vous ne pouvez les ajouter au tableau qu'un par un via une boucle :


Remarque : Il n'y a pas de problème de compatibilité avec la méthode d'emprunt de tableaux pour les arguments.


En fonction de la différence entre IE6~8 et les navigateurs standards, extrayez la classe d'outils pour convertir des objets de type tableau en tableaux :

for (var i = 0; i < oLis.length; i++) { 
ary[ary.length] = oLis[i]; 
}
Copier après la connexion

Le navigateur est utilisé dans cet outil méthode Capture des informations sur les exceptions, présentons-les donc ici.

console.log(num);

Lorsque nous générons une variable non définie, une erreur sera signalée : Uncaught ReferenceError : num n'est pas défini. En JavaScript, cette ligne signalera une erreur, et ce qui suit. le code ne sera plus exécuté.

function listToArray(likeAry) {
    var ary = [];    try {
        ary = Array.prototype.slice.call(likeAry);
    } catch (e) {        for (var i = 0; i < likeAry.length; i++) {
            ary[ary.length] = likeAry[i];
        }
    }    return ary;
}1234567891011
Copier après la connexion
Mais si try..catch est utilisé pour capturer les informations d'exception, cela n'affectera pas l'exécution du code suivant. Si une erreur se produit lors de l'exécution du code en try, le try en catch sera exécuté. par défaut {


Donc, le format d'utilisation de try...catch est (très similaire à Java) :


À ce moment, je je veux capturer les informations, mais je ne veux pas laisser le Diamante suivant être exécuté, alors que faut-il faire ?
console.log(num); 
} catch (e) { // 形参必须要写,我们一般起名为e 
console.log(e.message); // –> num is not defined 可以收集当前代码报错的原因 
} 
console.log(‘ok’);
Copier après la connexion


Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

try { 
// 
} catch (e) { 
// 如果代码报错执行catch中的代码 
} finally { 
// 一般不用:不管try中的代码是否报错,都要执行finally中的代码 
}
Copier après la connexion
Lecture recommandée :

try {    console.log(num);
} catch (e) {    // console.log(e.message); // --> 可以得到错误信息,把其进行统计    // 手动抛出一条错误信息,终止代码执行    throw new Error(&#39;当前网络繁忙,请稍后再试&#39;);    // new ReferenceError --> 引用错误    // new TypeError --> 类型错误    // new RangeError --> 范围错误
}console.log(&#39;ok&#39;);
Copier après la connexion
Quelles sont les différences entre appeler, appliquer et lier en JavaScript

Explication détaillée de l'appel en javascript

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal