带字符串的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')
。此项不起作用,请给我指出将在函数内部起作用的正确语句。

强制
关键字引用对象:

  • 否则,如果Type(thisArg)不是Object,则将
    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);