JS调用函数传入未加引号值报未定义错误,如何无需提前转字符串实现?
报错原因
你遇到的报错和函数内部是否转字符串没有任何关系,问题出在**函数传参的解析阶段:
- 当你写
Introduction(Mark, bad)时,JavaScript 引擎会先尝试查找名为Mark和bad的变量,读取它们的值再传入函数。你没有提前定义过这两个变量,代码运行到调用这一步就会直接抛出ReferenceError,根本不会执行函数内部的转字符串逻辑。 - 当你给参数加引号写成
"Mark"、"bad"时,这两个值会被解析为字符串字面量,不需要查找变量,因此可以正常运行。
不需要在调用时手动写字符串的实现方案
如果你不想在调用函数时给字符串参数加引号,可以用提前定义变量的方式实现:
// 提前定义对应变量,值为你需要的字符串 const Mark = 'Mark'; const bad = 'bad'; function Introduction(name, adj) { return "My name is " + name + " and i am " + adj; }; // 调用时直接传变量名即可,不需要加引号 console.log(Introduction(Mark, bad));
另外补充:JavaScript 语法规则本身不支持直接将未加引号的标识符自动识别为字符串,所有未加引号的内容都会被引擎优先解析为变量、常量、函数名等标识符,不存在绕过引号的方法,所有不用写引号的方案本质都是提前完成了变量定义。
内容的提问来源于stack exchange,提问作者Sun23
相关产品推荐
相关产品推荐

