Aquí tienes algunas gemas:
Literales:
var obj = {}; // Object literal, equivalent to var obj = new Object();
var arr = []; // Array literal, equivalent to var arr = new Array();
var regex = /something/; // Regular expression literal, equivalent to var regex = new RegExp('something');
Valores predeterminados:
arg = arg || 'default'; // if arg evaluates to false, use 'default', which is the same as:
arg = !!arg ? arg : 'default';
Por supuesto, conocemos funciones anónimas, pero poder tratarlas como literales y ejecutarlas en el acto (como un cierre) es genial:
(function() { ... })(); // Creates an anonymous function and executes it
Pregunta: ¿Qué otro gran azúcar sintáctico está disponible en javascript?
javascript
language-features
syntactic-sugar
párpados
fuente
fuente
Respuestas:
Obtener la fecha y hora actual en milisegundos:
Date.now()
Por ejemplo, para cronometrar la ejecución de una sección de código:
var start = Date.now(); // some code alert((Date.now() - start) + " ms elapsed");
fuente
Prueba de pertenencia a objetos:
fuente
En Mozilla (y según se informa IE7) puede crear una constante XML usando:
También puede sustituir variables:
fuente
Usando funciones anónimas y un cierre para crear una variable privada (ocultación de información) y los métodos asociados get / set:
var getter, setter; (function() { var _privateVar=123; getter = function() { return _privateVar; }; setter = function(v) { _privateVar = v; }; })()
fuente
if(true) { let _privateVar=123; }
Ser capaz de extender los tipos de JavaScript nativos a través de la herencia de prototipos.
String.prototype.isNullOrEmpty = function(input) { return input === null || input.length === 0; }
fuente
Úselo
===
para comparar valor y tipo:fuente
$var1 = 'string'; $var2 = 'string'; $var1 === $var2; // true
, aunque$var1
y$var2
no son idénticos (referencias al mismo valor almacenado en la memoria), solo el mismo tipo y el mismo valor.var1 = {a : 'b'}; var2 = {a : 'b'}; var1 === var2 // false
.Cuerdas multilínea:
Dado que no puede sangrar las líneas siguientes sin agregar también el espacio en blanco a la cadena, la gente generalmente prefiere concatenar con el operador más. Pero esto proporciona una buena capacidad de documento aquí .
fuente
Cambiar el tamaño de la longitud de una matriz
La propiedad length no es de solo lectura . Puede usarlo para aumentar o disminuir el tamaño de una matriz.
var myArray = [1,2,3]; myArray.length // 3 elements. myArray.length = 2; //Deletes the last element. myArray.length = 20 // Adds 18 elements to the array; the elements have the empty value. A sparse array.
fuente
push
para mí, jeje. Gracias un montón.Repetir una cadena como "-" una cantidad específica de veces aprovechando el método de unión en una matriz vacía:
var s = new Array(repeat+1).join("-");
Resultados en "---" cuando se repite == 3.
fuente
Al igual que el operador por defecto,
||
es el operador de guardia,&&
.Opuesto a
if (obj) { answer = obj.property; } else { answer = null; }
fuente
null
. Este es solo el caso cuandoobj === null
.var tags = { name: "Jack", location: "USA" }; "Name: {name}<br>From {location}".replace(/\{(.*?)\}/gim, function(all, match){ return tags[match]; });
la devolución de llamada para el reemplazo de cadenas es útil.
fuente
Getters y setters :
function Foo(bar) { this._bar = bar; } Foo.prototype = { get bar() { return this._bar; }, set bar(bar) { this._bar = bar.toUpperCase(); } };
Nos da:
>>> var myFoo = new Foo("bar"); >>> myFoo.bar "BAR" >>> myFoo.bar = "Baz"; >>> myFoo.bar "BAZ"
fuente
Esto no es exclusivo de JavaScript, pero guarda como tres líneas de código:
fuente
Un poco más sobre el ejemplo de levik:
var foo = (condition) ? value1 : value2;
fuente
La matriz # forEach en Javascript 1.6
myArray.forEach(function(element) { alert(element); });
fuente
Siguiendo obj || Sintaxis {predeterminada: verdadera}:
llamando a su función con esto: hola (needOne && requiredTwo && needThree) si un parámetro no está definido o es falso, llamará hola (falso), a veces útil
fuente
En situaciones de análisis con un conjunto fijo de componentes:
var str = "John Doe";
Puede asignar los resultados directamente a las variables, utilizando la "asignación de desestructuración" synatx:
var [fname, lname] = str.split(" "); alert(lname + ", " + fname);
Que es un poco más legible que:
var a = str.split(" "); alert(a[1] + ", " + a[0]);
Alternativamente:
var [str, fname, lname] = str.match(/(.*) (.*)/);
Tenga en cuenta que esta es una función de Javascript 1.7 . Así que esos son los navegadores Mozilla 2.0+ y Chrome 6+, en este momento.
fuente
SyntaxError: Unexpected token [
.Función de flecha inmediatamente invocada:
var test = "hello, world!"; (() => test)(); //returns "hello, world!";
fuente
Olvidé:
(function() { ... }).someMethod(); // Functions as objects
fuente
Cree un literal de objeto anónimo con simplemente: ({})
Ejemplo: necesito saber si los objetos tienen el método valueOf:
var hasValueOf = !! ({}). valueOf
Azúcar sintáctico adicional: el doble no '!!' para convertir casi cualquier cosa en un booleano de manera muy sucinta.
fuente
Me encanta poder evaluar () una cadena json y recuperar una estructura de datos completamente poblada. Odio tener que escribir todo al menos dos veces (una para IE, otra vez para Mozilla).
fuente
Asignar las palabras clave de uso frecuente (o cualquier método) a variables simples como ths
var $$ = document.getElementById; $$('samText');
fuente
this
se pierde el valor. En su lugar, debería usardocument.getElementById.bind(document)
. Sinbind
él es meramente asignar laHTMLDocument.prototype.getElementById
función, sin la información que debe ser invocadadocument
.La clase Date de JavaScript proporciona una semi- "Interfaz fluida". Esto compensa el no poder extraer la parte de la fecha de una clase de fecha directamente:
var today = new Date((new Date()).setHours(0, 0, 0, 0));
No es una interfaz completamente fluida porque lo siguiente solo nos dará un valor numérico que en realidad no es un objeto de fecha:
var today = new Date().setHours(0, 0, 0, 0);
fuente
Respaldo predeterminado:
var foo = {}; // empty object literal alert(foo.bar) // will alert "undefined" alert(foo.bar || "bar"); // will alert the fallback ("bar")
Un ejemplo práctico:
// will result in a type error if (foo.bar.length === 0) // with a default fallback you are always sure that the length // property will be available. if ((foo.bar || "").length === 0)
fuente
Aquí hay uno que acabo de descubrir: verificación nula antes de llamar a la función:
Este es un equivalente más corto a:
a = b ? b.length : null;
La mejor parte es que puede verificar una cadena de propiedades:
fuente
Me encanta lo sencillo que es trabajar con listas:
var numberName = ["zero", "one", "two", "three", "four"][number];
Y hashes:
var numberValue = {"zero":0, "one":1, "two":2, "three":3, "four":4}[numberName];
En la mayoría de los otros lenguajes, este código sería bastante pesado. Los valores predeterminados también son encantadores. Por ejemplo, informe de códigos de error:
var errorDesc = {301: "Moved Permanently", 404: "Resource not found", 503: "Server down" }[errorNo] || "An unknown error has occurred";
fuente
int to string cast
var i = 12; var s = i+"";
fuente
element.innerHTML = ""; // Replaces body of HTML element with an empty string.
Un atajo para eliminar todos los nodos secundarios del elemento.
fuente
Convierta la cadena a un entero por defecto a 0 si es imposible,
0 | "3" //result = 3 0 | "some string" -> //result = 0 0 | "0" -> 0 //result = 0
Puede ser útil en algunos casos, principalmente cuando 0 se considera un mal resultado
fuente
Literales de plantilla
var a = 10; var b = 20; var text = `${a} + ${b} = ${a+b}`;
¡entonces la variable de texto será como la siguiente!
fuente