Хотя существуют некоторые основательные ответы, я думал, что совместно использую свой подход. Я предпочитаю использовать функциональный подход с помощью Функтора. Функтор является просто необычным способом сказать, что мы будем передавать функцию значению. (Предположения, что я видел, передают значения функции)
, Создают помощника TypeOf
const TypeOf = obj => Object.prototype.toString.call(obj).slice(8,-1);
, Это подобно typeof, но теперь возвращается Array
для []
и Object
для {}
. Мне нравится думать о нем как о строгом typeof. Если Вы работаете над приложением Gmail, и производительность является беспокойством тогда, можно сделать что-то вроде этого.
const TypeOf = obj => (
Array.isArray(obj)
? "array"
: obj === null // catch null edge case. typeof null is an object :)
? null
: typeof obj
)
Вы могли остановиться здесь и прекратить дело, однако Вы могли сделать это немного более мощным составом использования. Вы извлекаете большую пользу при создании Функтора TypeBox, снова необычное слово для передачи функции к значению вместо того, чтобы передать значение функции.
Создают TypeBox
const TypeBox = (predicate, defaultValue) => {
const TypePredicate = value => ({
value,
map: cb => predicate(value)
? TypePredicate(cb(value))
: TypePredicate(defaultValue)
});
return TypePredicate;
}
здесь существует большое продолжение, но это очень мощно. Функция TypeBox использует закрытие и возвращает наш Функтор. Закрытия предоставляют Вам доступ к Lexical_Scope, думают о нем как о рюкзаке, который содержит вещи, к которым Вы хотите получить доступ позже.
Создают ArrayBox
const ArrayBox = TypeOf(obj => TypeOf(obj) === 'Array' ? obj : [obj]);
ArrayBox, передает наш predicate
и defaultValue
к [1 112] и будет доступен, когда мы вызываем/выполняем ArrayBox
(назовите его, вообще имеет смысл для Вашего варианта использования).
Теперь забавная часть
, Если входом является Массив, возвращает его.
ArrayBox(["foo", "bar"]).value; // ['foo', 'bar']
, Если вход не является массивом, возвратите его в одном
ArrayBox("foo").value // ["foo"]
, Что является большим об этом подходе, то, что он масштабируется, легко протестировать, и он использует состав. Можно составить функции любым способом для получения желаемого результата.
существует много других способов, которыми мы могли приблизиться к этому использованию Или или Монады.
Это взлом для IE7 и ниже. IE7 и более ранние версии пропускают звездочку и продолжают анализировать CSS как обычно. Другие браузеры просто проигнорируют правило полностью.
В качестве примера, поскольку CSS будет использовать последнюю объявленную версию правила, выполнение следующих действий приведет к тому, что IE7 и ниже будет использовать размер шрифта
113%, в то время как другие браузеры используют ] font-size
100% для абзацев.
p { font-size: 100%; *font-size: 113%; }
Немного больше информации можно найти на webdevout.net .
Лично я считаю приемлемым использование таких хаков для чтобы обойти поломку IE. Судя по всему, Yahoo! чувствует то же самое.
Вероятно, это взлом совместимости с IE.
Есть много синтаксиса CSS ошибки, которые некоторые браузеры (особенно IE 6) игнорируют, а другие нет. Некоторые файлы CSS будут использовать ошибки, чтобы создать правило, что один браузер будет видеть, а другой - нет.
РЕДАКТИРОВАТЬ : Полный список см. здесь . В вашем конкретном случае это правило будет видно только IE 7 или более ранней версии.