Вы можете сделать это
, это единственный способ увидеть:
<html>
<head>
<title>Open exe</title>
<script type="text/javascript">
function runProgram()
{
var shell = new ActiveXObject("WScript.Shell");
var appITunes = "\"C:\\Program Files\\iTunes\\iTunes.exe\" ";
shell.Run(appITunes);
}
</script>
</head>
<body>
<a href="javascript:runProgram()">Run program</a>
</body>
</html>
var isTrueSet = (myValue == 'true');
Вы могли сделать его более строгим при помощи оператора (===
) идентификационных данных, который не делает неявных преобразований типов, когда сравненные переменные имеют различные типы вместо оператора равенства (==
).
var isTrueSet = (myValue === 'true');
<час> Вы должны, вероятно быть осторожными относительно использования этих двух методов для Ваших определенных потребностей:
var myBool = Boolean("false"); // == true
var myBool = !!"false"; // == true
Любая строка, которая не является пустой строкой, оценит к true
при помощи их. Хотя они - самые чистые методы, я могу думать о касающемся к булеву преобразованию, я думаю, что они не то, что Вы ищете.
Необходимо разделить (во взглядах) значение выборов и представление того значения.
Выбор точка в логике JavaScript, где они должны перейти от строковых сигнальных меток до собственного типа и сделать сравнение там, предпочтительно где это только сделано однажды для каждого значения, которое должно быть преобразовано. Не забудьте обращаться к тому, какие потребности произойти, если строковая сигнальная метка каждый не сценарий, знает (т.е. действительно ли Вы принимаете значение по умолчанию к истинному или ко лжи?)
, Другими словами, да, необходимо зависеть от значения строки.:-)
Ваше решение прекрасно.
Используя ===
просто было бы глупо в этом случае, как поле value
всегда будет String
.
Можно использовать регулярные выражения:
/*
* Converts a string to a bool.
*
* This conversion will:
*
* - match 'true', 'on', or '1' as true.
* - ignore all white-space padding
* - ignore capitalization (case).
*
* ' tRue ','ON', and '1 ' will all evaluate as true.
*
*/
function strToBool(s)
{
// will match one and only one of the string 'true','1', or 'on' rerardless
// of capitalization and regardless off surrounding white-space.
//
regex=/^\s*(true|1|on)\s*$/i
return regex.test(s);
}
, Если Вам нравится расширять Строковый класс, можно сделать:
String.prototype.bool = function() {
return strToBool(this);
};
alert("true".bool());
Для тех (см. комментарии), который хотел бы расширить Строковый объект получить это, но волнуется по поводу перечислимости и волнуются по поводу столкновения с другим кодом, который расширяет Строковый объект:
Object.defineProperty(String.prototype, "com_example_bool", {
get : function() {
return (/^(true|1)$/i).test(this);
}
});
alert("true".com_example_bool);
(Не будет работать в более старых браузерах, конечно, и Firefox, показывает ложь в то время как Opera, Chrome, Safari и верное шоу IE. Ошибка 720760 )
Не забудьте соответствовать случаю:
var isTrueSet = (myValue.toLowerCase() === 'true');
кроме того, если это - флажок элемента формы, можно также обнаружить, если флажок проверяется:
var isTrueSet = document.myForm.IS_TRUE.checked;
Предположение, что, если это проверяется, это "установлено" равное истинному. Это оценивает как истинное/ложное.
Я думаю, что это очень универсально:
if (String(a) == "true")
...
Это идет:
String(true) == "true" //returns true
String(false) == "true" //returns false
String("true") == "true" //returns true
String("false") == "true" //returns false
var myBool = Boolean.parse("true");
или
var myBool = Boolean("true");
или
var myBool = !!"true";
Не уверенный, если первым является конкретный IE.
Если существует некоторый другой код, это преобразовывает булево значение в строку, необходимо знать точно, как тот код хранит истинные/ложные значения. У или этого или Вас должен быть доступ к функции, которая инвертирует то преобразование.
существует бесконечно много способов представить булевы значения в строках ("верный", "Y", "1", и т.д.). Таким образом, Вы не должны полагаться на некоторый преобразователь строки к булевской переменной общего назначения, как булевская переменная (myValue). Необходимо использовать стандартную программу, которая инвертирует исходную булевскую переменную к преобразованию строк, независимо от того, что это.
, Если Вы знаете, что это преобразовывает истинные булевские переменные в "истинные" строки, затем Ваш пример кода прекрасен. За исключением того, что необходимо использовать === вместо ==, таким образом, нет никакого автоматического преобразования типов.
stringToBoolean: function(string){
switch(string.toLowerCase().trim()){
case "true": case "yes": case "1": return true;
case "false": case "no": case "0": case null: return false;
default: return Boolean(string);
}
}
Boolean.parse = function (str) {
switch (str.toLowerCase ()) {
case "true":
return true;
case "false":
return false;
default:
throw new Error ("Boolean.parse: Cannot convert string to boolean.");
}
};
if (String(a) == "true"){
//true block
} else {
//false block
}
Достаточно следующего
String.prototype.boolean = function() {
return "true" == this;
};
"true".boolean() // returns true "false".boolean() // returns false
Я надеюсь, что это - самый всесторонний вариант использования
function parseBoolean(token) {
if (typeof token === 'string') {
switch (token.toLowerCase()) {
case 'on':
case 'yes':
case 'ok':
case 'ja':
case 'да':
// case '':
// case '':
token = true;
break;
default:
token = false;
}
}
let ret = false;
try {
ret = Boolean(JSON.parse(token));
} catch (e) {
// do nothing or make a notification
}
return ret;
}
Просто делайте A:
var myBool = eval (yourString);
Примеры:
alert (eval ("true") == true); // TRUE
alert (eval ("true") == false); // FALSE
alert (eval ("1") == true); // TRUE
alert (eval ("1") == false); // FALSE
alert (eval ("false") == true); // FALSE;
alert (eval ("false") == false); // TRUE
alert (eval ("0") == true); // FALSE
alert (eval ("0") == false); // TRUE
alert (eval ("") == undefined); // TRUE
alert (eval () == undefined); // TRUE
Этот метод обрабатывает пустую строку и undefined String, как если бы вы объявляете переменную, не назначаете его значение.