Javascript中createVideo函数if语句未正确触发问题求助
问题解决:修复createVideo函数的逻辑错误
你的代码核心问题是错误地把参数和布尔值直接比较——比如你传的width是500(数字),却判断width === true,这永远不会成立;同时逻辑分支重复混乱,导致所有条件都无法触发,video变量甚至可能未被赋值。
下面是完全符合你要求的修复后代码:
function createVideo(src, width, controls) { // 处理src,去除首尾空格 const trimmedSrc = src.trim(); // 初始化属性数组,先放入src属性 const attributes = [`src="${trimmedSrc}"`]; // 仅当width是有效正整数时,添加width属性 if (Number.isInteger(width) && width > 0) { attributes.push(`width="${width}"`); } // 若controls为true,添加controls属性 if (controls === true) { attributes.push('controls'); } // 用单个空格拼接所有属性,生成最终video标签 const video = `<video ${attributes.join(' ')}></video>`; console.log(video); } // 调用示例 createVideo( "http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_60fps_normal.mp4", 500, false );
关键修复说明:
- 放弃穷举式的if分支,改用数组动态拼接属性,逻辑更清晰且易扩展
- 用
Number.isInteger(width) && width > 0精准判断有效整数width,满足要求4 - 属性格式严格遵循规范:
src="xxx"(等号前后无空格),属性间用单个空格分隔 - 正确处理controls参数:仅当传入true时才添加该属性
运行修正后的代码,你的调用示例会输出:
<video src="http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_60fps_normal.mp4" width="500"></video>
内容的提问来源于stack exchange,提问作者Crimson
相关产品推荐
相关产品推荐

