带字符串的JavaScript函数调用/应用
我刚刚注意到,当我想将字符串作为带字符串的JavaScript函数调用/应用,javascript,function,call,this,apply,Javascript,Function,Call,This,Apply,我刚刚注意到,当我想将字符串作为“this”传递时,在JavaScript函数中无法正确获取类型 以下是一个例子: var str = 'string value'; if (typeof (str) == 'string') { alert('string outside'); } var fn = function(s) { if (typeof (str) == 'string') { alert('string param'); } i
“this”
传递时,在JavaScript函数中无法正确获取类型
以下是一个例子:
var str = 'string value';
if (typeof (str) == 'string') {
alert('string outside');
}
var fn = function(s) {
if (typeof (str) == 'string') {
alert('string param');
}
if (typeof (this) == 'string') {
alert('string this');
}
else {
alert(typeof(this));
}
};
fn.call(str, str);
我看到3条消息:“外部字符串”
,“字符串参数”
,以及“对象”
我的目标是编写一个“if”
语句,它说“this”
是字符串。类似于if(typeof(this)='string')
。此项不起作用,请给我指出将在函数内部起作用的正确语句。强制此
关键字引用对象:
ThisBinding
设置为ToObject(thisArg)
原语值用作上下文时作为对象嵌入 发件人: 请注意,这可能不是该方法看到的实际值:如果 方法是非严格模式代码中的函数,为null且未定义 将替换为全局对象,并将 盒装的 如果要知道对象是否为String类型,请使用:
var isString = Object.prototype.toString.call(str) == '[object String]';
这是对象类型检测的解决方案。要访问函数的参数,您不需要使用
此
请尝试以下方法:
var fn = function(s) {
if (typeof (s) == 'string') { // "s" is your passed parameter there.
alert('string param');
}
};
(显然,您甚至已经为传递的参数指定了一个名称)
查看有关函数和参数的基本知识。此的
类型之所以为“对象”
是因为此
必须始终指向对象。这里JavaScript隐式地将字符串强制为对象。您需要的是对象的基本值。试试这个:
var str = "string value";
if (typeof str === "string") alert("string outside");
function fn(str) {
var type = typeof this.valueOf();
if (typeof str === "string") alert("string param");
if (type === "string") alert("string this");
else alert(type);
};
fn.call(str, str);
希望这有帮助。请参阅演示:游戏的结尾是什么?我想知道“this”是否为字符串。我在真正的代码中没有param,只有“this”,所以别无选择。你到底想用它实现什么<代码>此
是其中的窗口
对象。或者更好的是,为什么需要检查这
是否是字符串?它永远不会是字符串。我想知道,调用方是否打算传递字符串(即使现在看起来是包含字符的对象)。为什么你想知道这是字符串?解决方法?我只是想知道至少有人尝试过这个字符串。我不是说要修改,我是说要查询或区分。你的意思是测试typeof是否是一个对象字符串?让我看看我能做些什么。谢谢。这很有效,但你是第二个给出正确答案的人+1.好的,谢谢,花了一点时间试图找到正确的对象原型方法。不知道window有一个窗口。toString
方法,每天学习新东西。明白,谢谢。解决办法?想知道调用方打算传递字符串。这起作用了。你的回答将被接受。谢谢!:-)第一个关注细节的人。@roy在哪里可以找到window.toString
上的文档?MDN似乎缺少上一个。哦,显然window
派生自Object。这显然不会很好地工作在旧IE虽然。我正在使用Object.prototype.toString,我想这会一直有效。这个答案给了我一个正确的提示。这是一个例子。我想测试“这个”。但我已经得到了一个会被接受的答案。谢谢
var str = "string value";
if (typeof str === "string") alert("string outside");
function fn(str) {
var type = typeof this.valueOf();
if (typeof str === "string") alert("string param");
if (type === "string") alert("string this");
else alert(type);
};
fn.call(str, str);