如何在JavaScript中判断一个变量是字符串还是其他东西?
你可以使用typeof
操作符。
var booleanValue = true;
var numericalValue = 354;
var stringValue = "This is a String";
var stringObject = new String( "This is a String Object" );
alert(typeof booleanValue) // displays "boolean"
alert(typeof numericalValue) // displays "number"
alert(typeof stringValue) // displays "string"
alert(typeof stringObject) // displays "object"
例子来自本网页。(虽然例子略有修改)。
在用new String()
创建的字符串中,这不会像预期的那样工作,但这很少使用,建议不要使用[1][2] 。如果你想知道如何处理这些,请参见其他答案。
1.Google JavaScript风格指南说永远不要使用原始对象包装器。 2.Douglas Crockford 建议废弃原始对象包装器。
最好的方法。
var s = 'String';
var a = [1,2,3];
var o = {key: 'val'};
(s.constructor === String) && console.log('its a string');
(a.constructor === Array) && console.log('its an array');
(o.constructor === Object) && console.log('its an object');
(o.constructor === Number || s.constructor === Boolean) && console.log('this won\'t run');
每一个都是由其相应的类函数构建的,如"new Object()"等。
还有,鸭子类型。 "如果它看起来像一只鸭子,走起来像一只鸭子,闻起来像一只鸭子--它一定是一个数组"。 意思是,检查它的属性。
希望这有帮助。
请记住,你也可以随时使用各种方法的组合。这里有一个用typeof动作的*内联地图的例子。
var type = { 'number': Math.sqrt.bind(Math), ... }[ typeof datum ];
这里是一个更多的'现实世界'的使用内联地图的例子。
function is(datum) {
var isnt = !{ null: true, undefined: true, '': true, false: false, 0: false }[ datum ];
return !isnt;
}
console.log( is(0), is(false), is(undefined), ... ); // >> true true false
这个函数将使用[custom]"type-casting"--而是"type-/-value-mapping"--来计算一个变量是否真正"存在"。现在你可以在 "null "和 "0 "之间分割出令人讨厌的头发了!
很多时候,你甚至不关心它的类型。另一种规避类型的方法是结合Duck-Type集。
this.id = "998"; // use a number or a string-equivalent
function get(id) {
if (!id || !id.toString) return;
if (id.toString() === this.id.toString()) http( id || +this.id );
// if (+id === +this.id) ...;
}
Number.prototype
和 String.prototype
都有一个.toString()方法
。你只是确保数字的字符串等价物是相同的,然后你确保把它作为一个 "数字 "传入http
函数。换句话说,我们甚至不*关心它的类型是什么。
希望这能给你更多的工作机会 :)