Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
知道变量是否是javascript中的本机对象_Javascript_Variables_Native - Fatal编程技术网

知道变量是否是javascript中的本机对象

知道变量是否是javascript中的本机对象,javascript,variables,native,Javascript,Variables,Native,有没有办法知道传入函数的变量是否为本机对象?我的意思是,我有一个函数,它只需要本机对象作为参数,对于其他类型的变量,它会抛出一个错误。因此: func(Array); //works func(String); //works func(Date); //works func(Object); //works ... func([]); //Throwr error func({}); //Throws error 我想知道是否有办法区分本机对象和其他对象。您必须执行===或!==从你的问题来

有没有办法知道传入函数的变量是否为本机对象?我的意思是,我有一个函数,它只需要本机对象作为参数,对于其他类型的变量,它会抛出一个错误。因此:

func(Array); //works
func(String); //works
func(Date); //works
func(Object); //works
...
func([]); //Throwr error
func({}); //Throws error
我想知道是否有办法区分本机对象和其他对象。

您必须执行===或!==从你的问题来看,接受值的列表不会太长,意识到这可能会被欺骗,让你认为某个东西不是来自另一个窗口的本地值

但基本上:

if (obj !== Array &&
    obj !== String &&
    obj !== Date &&
    /* ...and so on, there are only a few of them... */
   ) {
    throw "your error";
}
编辑我对其他窗口中的内容的评论:请注意,一个窗口中的构造函数与另一个窗口(包括iFrame)中的构造函数之间不存在===关系,例如:

var wnd = window.open('blank.html');
alert("wnd.Array === Array? " + (wnd.Array === Array));

警报wnd.Array==数组?错误,因为wnd中的数组与当前窗口中的数组不同,即使两者都是数组的内置构造函数。

据我所知,获取某种类型的当前最佳实践方法是

var theType = Object.prototype.toString.call(theObject);
这将为您提供一个类似于[object Array]的字符串


现在,请记住[]是一个数组实例,{}是一个对象实例。

JavaScript中有一个类型的操作符可能会有所帮助

alert (typeof arg)
另一个稍微复杂一点的方法是使用

arg.prototype.constructor

这将提供对用于构造对象的函数的引用

Javascript非常混乱。另外,[]是一个数组。是的,但数组是一个函数,因为它是数组对象的构造函数。哦,我明白了-你想对构造函数函数本身进行操作。我认为空哈希是新对象的快捷方式。你能给出一个更详细的例子吗?为什么你需要这样的功能?我确信有更好的解决方案,而不是检测本机对象。@mck89:我认为在这种情况下,术语内置构造函数比本机对象更准确。如果您尝试使用本机对象来解决此问题,您将始终得到[object Function],因为它们都是函数,所以没有办法区分它们,因为每个其他函数都有相同的结果。我是在误解你的问题的情况下输入的。您的问题标题询问本机对象,而您真正感兴趣的似乎是创建本机对象的构造函数集。看看克劳德先生的答案。我不知道你能做那种比较,谢谢。所以我认为这是唯一的办法对吗?没有办法对每一个构造器都进行常规检查?@mck89:据我所知,没有捷径可走。顺便说一句,我编辑了我的答案,以便更好地解释窗口的问题。这是我收到的最全面的答案。谢谢:@mck89:LOL,不用担心,很高兴这有帮助。