Javascript 为什么可以';在v3中,我是否将普通变量转换为jQuery对象?

Javascript 为什么可以';在v3中,我是否将普通变量转换为jQuery对象?,javascript,jquery,Javascript,Jquery,我们刚刚将jQuery版本从v1.7升级到v3.4.1。我们有一些代码将jQuery对象(DOM中还不存在,我猜是这个问题的根本原因)传递给函数。但是,当试图处理这个新创建的变量时,它只返回根jQuery函数本身:jQuery.fn.init{} 这个答案帮助我认识到了这个问题: 实际片段: create: function (params) { console.log('params.target:', params.target); var $target,

我们刚刚将jQuery版本从v1.7升级到v3.4.1。我们有一些代码将jQuery对象(DOM中还不存在,我猜是这个问题的根本原因)传递给函数。但是,当试图处理这个新创建的变量时,它只返回根jQuery函数本身:
jQuery.fn.init{}

这个答案帮助我认识到了这个问题:

实际片段:

create: function (params) {
        console.log('params.target:', params.target);
        var $target, id;

        if (_.isString(params.target)) {
            if (params.target.charAt(0) === '#') {
                $target = $('#send-to-friend-dialog');
                console.log('$target1: ', $target);
            } else {
                $target = $('#' + params.target);
            }
        } else if (params.target instanceof jQuery) {
            $target = params.target;
        } else {
            $target = $('#dialog-container');
        }

        console.log('$target.length: ', $target.length)

        // if no element found, create one
        if ($target.length === 0) {
            console.log('$target2 : ', $target);
            if ($target.selector && $target.selector.charAt(0) === '#') {
                id = $target.selector.substr(1);
                $target = $('<div>').attr('id', id).addClass('dialog-content').appendTo('body');
            }
        }

        // create the dialog
        console.log('$target3: ', $target);
        this.$container = $target;
        this.$container.dialog($.extend(true, {}, this.settings, params.options || {}));
        return this.$container;
    },
create:function(参数){
log('params.target:',params.target');
var$target,id;
if(u.isString(参数目标)){
if(params.target.charAt(0)=='#'){
$target=$(“#发送给朋友对话框”);
log(“$target1:”,$target);
}否则{
$target=$(“#”+参数target);
}
}else if(jQuery的params.target instanceof){
$target=params.target;
}否则{
$target=$(“#对话框容器”);
}
console.log(“$target.length:”,$target.length)
//如果找不到元素,请创建一个
如果($target.length==0){
log(“$target2:”,$target);
if($target.selector&&$target.selector.charAt(0)=='#'){
id=$target.selector.substr(1);
$target=$('').attr('id',id.).addClass('dialog-content').appendTo('body');
}
}
//创建对话框
log(“$target3:”,$target);
这个.$container=$target;
这个.container.dialog($.extend(true,{},this.settings,params.options |{}));
退回这个$container;
},
v1.12.4中的输出:

v3.4.1中的输出:

因此,虽然定义了对象,但对象本身在两个版本中都是非常不同的输出,我想知道为什么


谢谢大家!

jQuery
.selector
属性在1.7中被弃用,在3.0中被删除。看见这是一个内部接口,不打算由应用程序使用

你需要重新设计你的代码,这样它就不需要这个了。文件建议了一种替代方案:

例如,“foo”插件可以写成
$.fn.foo=函数(选择器,选项){/*插件代码在这里*/},使用插件的人会写
$(“div.bar”).foo(“div.bar”,{dog:bark})
,并将
“div.bar”
选择器作为
.foo()
的第一个参数重复


“当我稍后在代码中引用$string时,它会”。。。。这句话的其余部分是什么?你能展示一个小飞贼来证明什么是坏的吗?什么以前起作用,现在不起作用?@epascarello抱歉,缺少一个倒勾:)UpdatedIf
$string.length
0
,则变量未定义。如果以后未定义,则中间的代码有问题,您没有显示。引用它时是否可能超出范围?我刚刚用3.3.1运行了它,它被定义了。你说得很对,先生。我甚至没有想到检查
.selector
属性。非常感谢你!