Le contenu de cet article est une introduction aux connaissances liées aux symboles dans ES6 (exemples de code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
symbole est un type introduit dans es6 Il appartient également à la catégorie des types primitifs (chaîne, nombre, booléen, nul, non défini, symbole)
let name = Symbol('xiaohesong') typeof name // 'symbol' let obj = {} obj[name] = 'xhs' console.log(obj[name]) //xhs
let uid = Symbol.for("uid"); let object = { [uid]: "12345" }; console.log(object[uid]); // "12345" console.log(uid); // "Symbol(uid)" let uid2 = Symbol.for("uid"); console.log(uid === uid2); // true console.log(object[uid2]); // "12345" console.log(uid2); // "Symbol(uid)"
let uid = Symbol.for("uid"); console.log(Symbol.keyFor(uid)); // "uid" let uid2 = Symbol.for("uid"); console.log(Symbol.keyFor(uid2)); // "uid" let uid3 = Symbol("uid"); console.log(Symbol.keyFor(uid3)); // undefined
let uid = Symbol('uid') uid + ''
let uid = Symbol('uid') let obj = { [uid]: 'uid' } console.log(Object.keys(obj)) // [] console.log(Object.getOwnPropertyNames(obj)) // [] console.log(Object.getOwnPropertySymbols(obj)) // [Symbol(uid)]
function Xiao(){} const xiao = new Xiao xiao instanceof Xiao // true
Xiao[Symbol.hasInstance](xiao)
Object.definePrototype(Xiao, Symbol.hasInstance, { value: (v) : Boolean(v) }) const x = new Xiao x instanceof Xiao //true 0 instanceof Xiao //false 1 instanceof Xiao //true
let objs = {0: 'first', 1: 'second', length: 2, [Symbol.isConcatSpreadable]: true} ['arrs'].concat(objs) //["arrs", "first", "second"]
. des prototypes de types standards existent. Lorsque toPrimitive
effectue une conversion de type,
sera obligé d'appeler un paramètre. Dans la spécification, ce paramètre est appelé toPrimitive
. Ce paramètre a trois valeurs ('number', 'string', 'default'. ) l'un d'eux. hint
Comme son nom l'indique,
renvoie string
, string
renvoie number
, et la valeur par défaut n'est pas spécifiée, la valeur par défaut. number
Alors, quelle est la situation par défaut ? Dans la plupart des cas, la valeur par défaut est le mode numérique. (Sauf pour la date, son état par défaut est considéré comme le mode chaîne)
En fait, peu de gens appellent l'état par défaut lors de la conversion de type. Comme (
, ==
) ou lors du passage de paramètres aux paramètres de construction de +
. Date
let obj = { valueOf: function(){console.log('valueOf')}, toString: function(){console.log('toString')} } // console.log value is obj + 2 //valueOf obj == 2 // valueOf Number(obj) // valueOf String(obj) // toString
Y compris le cas par défaut, sa valeur par défaut est le mode numérique appelé, et la plupart d'entre eux sont appelés dans le. En mode numérique, vous pouvez constater que toString est le mode qui appelle la chaîne. Vous pouvez donc penser qu’il s’agit essentiellement d’un mode numérique, à moins qu’il ne s’agisse d’un mode chaîne.
Pas très clair sur ce mode d'appel ? C'est bon, es6 expose cette méthode interne au monde extérieur, nous pouvons la réécrire et afficher le type de l'indice. Venez
function Temperature(degrees) { this.degrees = degrees; } Temperature.prototype[Symbol.toPrimitive] = function(hint) { console.log('hint is', hint) }; let freezing = new Temperature(32); freezing + 2 // .. freezing / 2 // .. ...
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!