<script type="text/javascript">
function saveName (firstName) {
function capitalizeName () {
return firstName.toUpperCase();
}
var capitalized = capitalizeName();console.log(capitalized instanceof String);
return capitalized;
}
console.log(saveName("Robert")); // Returns "ROBERT"
</script>
问题:
我想检查大写的类型,所以我使用capitalized instanceof String
?但它显示:false
在控制台中,我不想尝试capitalized instanceof Function
,Object
...这将花费太多时间,所以检测变量类型的最佳方法是什么?
答案 0 :(得分:14)
最好的方法是使用typeof
关键字。
typeof "hello" // "string"
typeof
运算符将操作数映射为六个值之一:"string"
,"number"
,"object"
,"function"
,"undefined"
和{ {1}}。 "boolean"
方法测试提供的函数的原型是否在对象的原型链中。
This Wikibooks article和this MDN articles在总结JavaScript的类型方面做得非常好。
答案 1 :(得分:1)
typeof capitalized =='string'
答案 2 :(得分:1)
最好的方法是使用typeof
typeof "blahha"
我在jQuery库代码 jQuery library type method github link的帮助下创建了一个函数。
var getType = (function() {
var objToString = ({}).toString ,
typeMap = {},
types = [
"Boolean",
"Number",
"String",
"Function",
"Array",
"Date",
"RegExp",
"Object",
"Error"
];
for ( var i = 0; i < types.length ; i++ ){
typeMap[ "[object " + types[i] + "]" ] = types[i].toLowerCase();
};
return function( obj ){
if ( obj == null ) {
return String( obj );
}
// Support: Safari <= 5.1 (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ?
typeMap[ objToString.call(obj) ] || "object" :
typeof obj;
}
}());
您可以将其称为getType("Hello")
答案 3 :(得分:1)
getVarType 方法(如下所示)几乎适用于所有变量。 Check out this fiddle。对于结果可靠的情况,它首先使用非常快的 typeof 。然后它为其他情况使用更昂贵的 toString 方法。最后,如果它正在处理一个命名对象(由Firefox返回像document.location这样的对象),它会检查类似于Array的对象并将它们报告为数组。
相比之下, typeof 令人尴尬。 typeof([])返回'object',typeof(new Number())返回object。它还为许多其他不是(出于实际目的)对象的变量返回“对象”。请参阅小提琴结果进行比较。
// Begin public utility /getVarType/
// Returns 'Function', 'Object', 'Array',
// 'String', 'Number', 'Null', 'Boolean', or 'Undefined'
//
getVarType = (function () {
var typeof_map = {
'undefined' : 'Undefined',
'boolean' : 'Boolean',
'number' : 'Number',
'string' : 'String',
'function' : 'Function',
'Undefined' : 'Undefined',
'Null' : 'Null',
'Boolean' : 'Boolean',
'Number' : 'Number',
'String' : 'String',
'Function' : 'Function',
'Array' : 'Array',
'StyleSheetList' : 'Array'
};
return function( data ) {
var type, type_str;
if ( data === null ) { return 'Null'; }
if ( data === undefined ) { return 'Undefined'; }
type = typeof( data );
type_str = typeof_map[ type ];
if ( type_str ) { return type_str; }
type = {}.toString.call( data ).slice( 8, -1 );
return typeof_map[ type ]
|| ( data instanceof Array ? 'Array' :
( data.propertyIsEnumerable(0) && data.length !== undefined
? 'Array' : 'Object' )
);
};
}());
// End public utility /getVarType/
如果您正在测试一个空的命名数组(例如,StyleSheetList之外的空可枚举DOM对象),则会发生唯一可能的失败模式。但是可以根据需要将它们添加到type_of_map中。
我希望有所帮助!
答案 4 :(得分:0)
使用typeof();
示例:
> typeof "foo"
"string"
> typeof true
"boolean"
> typeof 42
"number"
所以你可以这样做:
if(typeof bar === 'string') {
//whatever
}
请记住,typeof仅适用于返回“原始”类型,数字,布尔值,对象,字符串。您还可以使用instanceof来测试对象是否属于特定类型。
function MyObj(prop) {
this.prop = prop;
}
var obj = new MyObj(10);
console.log(obj instanceof MyObj && obj instanceof Object); // outputs true
答案 5 :(得分:0)
BigInt
和Symbol
的ES-Next版本
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-06-09
* @modified
*
* @description js data type checker
* @augments
* @example
* @link
*
*/
const dataTypeChecker = (data, debug = false) => {
const log = console.log;
let result = ``;
const typeString = Object.prototype.toString.call(data);
result = typeString.replace(/\[object /gi, ``).replace(/\]/gi, ``);
if(debug) {
log(`true type`, result)
}
return result;
};
export default dataTypeChecker;
export {
dataTypeChecker,
};
测试
const dataTypeChecker = (data, debug = false) => {
const log = console.log;
let result = ``;
const typeString = Object.prototype.toString.call(data);
// const typeString = Object.prototype.toString.apply(data);
result = typeString.replace(/\[object /gi, ``).replace(/\]/gi, ``);
if(!debug) {
log(`true type`, result)
}
return result;
};
const obj = {};
const func = () => {};
dataTypeChecker(NaN)
//"[object Number]"
dataTypeChecker(undefined)
//"[object Undefined]"
dataTypeChecker(true)
//"[object Boolean]"
dataTypeChecker({})
//"[object Object]"
dataTypeChecker(func)
//"[object Function]"
dataTypeChecker(obj)
//"[object Object]"
dataTypeChecker(Symbol())
//"[object Symbol]"
dataTypeChecker(null)
//"[object Null]"
dataTypeChecker(123)
//"[object Number]"
dataTypeChecker(BigInt(1n))
//"[object BigInt]"
// true type Number
// true type Undefined
// true type Boolean
// true type Object
// true type Function
// true type Object
// true type Symbol
// true type Null
// true type Number
// true type BigInt