javascript - 为什么它不承认我的论点是一个对象?我的 typeof 方法不正确吗?
问题描述
我们将完成一个函数,该函数接受一个参数,可能是一个对象,并返回输入是否为对象。您的函数应该创建几个变量(isObject、isNotAnArray 和 isObjectAndNotAnArray)。将 isObject 分配给 typeof 运算符对输入的应用程序。使用 ! 将 isNotAnArray 分配给对 Array.isArray() 方法的调用 运算符也适用。将 isObjectAndNotAnArray 分配给前面两个与 && 运算符结合的变量,并返回 isObjectAndNotAnArray 变量。下面是运行代码的示例,假设您将完成所描述的功能:isAnObject。
var resultBoolean1 = isAnObject([1, 2, 3]);
console.log('should log false:', resultBoolean1);
var resultBoolean2 = isAnObject({name: 'Tom', friend: 'Jerry'});
console.log('should log true:', resultBoolean2);
我的代码:
function isAnObject(input) {
var isObject = typeof input === 'object';
var isNotAnArray = Array.isArray(!input);
var isObjectAndNotAnArray = isObject && isNotAnArray;
return isObjectAndNotAnArray;// create an isObject variable
// assign it to whether the input is an object type
// create an isNotAnArray variable
// assign it to whether the input is not an array
// create an isObjectAndNotAnArray variable
// assign it to a combination of isObject AND isNotAnArray
// return the isObjectAndNotAnArray variable
}
它告诉我:当输入参数是一个对象时它返回 true
错误:
预期 false 与 true 相等
解决方案
你的感叹号放错地方了
var isNotAnArray = Array.isArray(!input);
至
var isNotAnArray = !Array.isArray(input);
因为你想否定布尔值而不是对象本身
只是为了更简洁的代码,我会清理它并缩短它:
function isObject(input) {
return Object.prototype.toString.call(input) === '[object Object]';
}
这是一种不同的方法,但基本上它将您的值转换为字符串,因此排除了数组,然后检查字符串是否为 [object Object]。我喜欢这个的原因是因为像“null”或“undefined”这样的值表现得很奇怪,并且被你定义它的方式视为对象,所以这个方法打开了你对所有变量类型的使用。
推荐阅读
- javascript - 有没有办法在函数中模拟 Promise.resolve
- matlab - 多次迭代后 MATLAB 中的 trainNetwork 出现错误:连接的数组维度不一致?
- reactjs - 为什么我的 React 本机 route.params 保存以前的路由数据?
- android - Flutter 移动应用程序中的 Flurry 崩溃报告
- flutter - 试图停止计时器但计时器没有停止
- php - 运行 PHPUnit 测试时无法加载 Xdebug
- android - 当我使用 viewmodel 时,为什么 onClick 方法不调用 ratingBar?
- python - 将数组字符串值添加到 pandas.DataFrame 时,它们会转换为浮点数
- telegram - 如何使用 python-telegram-bot (Bot API 5.1) 跟踪用户何时踢出 Telegram Bot
- maven - 就在创建新的 Maven 项目时,我收到此错误“无法计算构建计划插件 org.apache.maven.plugins maven-resources-plugin:2.6”