You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

typeof判断.get()返回值undefined失效的问题排查与解决尝试

问题分析与解决方案

报错原因

你之前的代码报错核心在于:当$deselected没有匹配到任何取消选中的选项时,$deselected.get()[0]会返回undefined。此时你直接访问它的.value属性,就会触发Cannot read properties of undefined (reading 'value')错误——因为undefined本身没有任何属性,自然无法读取value。

你原来的判断逻辑typeof $deselected.get()[0].value === "undefined"的问题是:在判断value的类型之前,已经尝试读取了这个属性,而此时$deselected.get()[0]可能已经是undefined,这一步直接抛出错误,根本走不到类型判断的逻辑里。

正确处理方式

1. 先确认元素存在再访问属性

就像你更新后的代码那样,先判断数组元素本身是否存在,再去访问其value属性:

var $slidesoptions = $('#Slidesnumber');
var $deselected = $slidesoptions.find('option.selected:not(:checked)');
$slidesoptions.find('option:checked').addClass('selected');
$deselected.removeClass('selected');

if(typeof $deselected.get()[0] !== "undefined"){
    console.log("存在取消选中的选项");
    console.log("取消选中的选项值:", $deselected.get()[0].value);
} else {
    console.log("没有取消选中的选项");
}

2. 更简洁的jQuery风格写法

jQuery对象自带length属性,直接判断$deselected.length > 0就能知道有没有匹配到元素,无需使用get()[0]:

var $slidesoptions = $('#Slidesnumber');
var $deselected = $slidesoptions.find('option.selected:not(:checked)');
$slidesoptions.find('option:checked').addClass('selected');
$deselected.removeClass('selected');

if($deselected.length > 0){
    console.log("存在取消选中的选项");
    console.log("取消选中的选项值:", $deselected.eq(0).val()); // 用eq(0)获取第一个匹配元素,val()直接取值
} else {
    console.log("没有取消选中的选项");
}

这种写法更符合jQuery的使用习惯,可读性也更强。


内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:55:15