JavaScript中“ +”和“,”之间的区别

时间:2018-07-20 21:44:17

标签: javascript arrays

我试图运行一个简单的javascript函数,试图学习javascript中的filter函数:

var arr = [
  { id: 15 },
  { id: -1 },
  { id: 0 },
  { id: 3 },
  { id: 12.2 },
  { },
  { id: null },
  { id: NaN },
  { id: 'undefined' }
];

var invalidEntries = 0;

function isNumber(obj) {
	return obj !== undefined && typeof(obj) === "number" && !isNaN(obj);
}

function filterByID(item) {
	if (isNumber(item.id) && item.id !== 0){
		return true;
  } 
  invalidEntries++;
  return false; 	
}

var arrByID = arr.filter(filterByID);

console.log("Filtered array: " ,arrByID);

上面的代码看起来很完美,但是当我将行console.log("Filtered array: " ,arrByID);更改为console.log("Filtered array: " +arrByID);时,它会给我带来完全不同的输出:

var arr = [
  { id: 15 },
  { id: -1 },
  { id: 0 },
  { id: 3 },
  { id: 12.2 },
  { },
  { id: null },
  { id: NaN },
  { id: 'undefined' }
];

var invalidEntries = 0;

function isNumber(obj) {
	return obj !== undefined && typeof(obj) === "number" && !isNaN(obj);
}

function filterByID(item) {
	if (isNumber(item.id) && item.id !== 0){
		return true;
  } 
  invalidEntries++;
  return false; 	
}

var arrByID = arr.filter(filterByID);

console.log("Filtered array: " +arrByID);

我可以知道为什么会这样吗,不是两个都显示相同的输出吗?我是学习JavaScript的新手,如果这是一个愚蠢的问题,请忽略。

3 个答案:

答案 0 :(得分:3)

String+Array将强制数组字符串化并连接两个字符串

控制台方法允许使用多个参数(用,分隔),并且将分别对待每个参数,因此您可以使用console.log(String, Array)获得正确的数组输出。

答案 1 :(得分:3)

执行console.log("something" + obj)时,实际上是在调用obj.toString()将对象转换为字符串,然后将此字符串与第一个字符串({{1}左端的字符串)连接},例如我的示例中的+

但是,当您执行"something"时,将分别记录字符串和对象。 console.log("something", obj)不会先转换为字符串。因此,obj确实可以以不同的方式显示它。例如。它可以让您检查物体。

对象在日志中的显示方式取决于console.log的实现。在不同的浏览器或node.js中可能有所不同。

答案 2 :(得分:0)

“ +”连接起来是因为第一个参数(“ Filtered array:”)是一个字符串 因此它将第二个参数视为字符串。

例如,console.log(1 + 2)返回3,而console.log(“ 1” +2)返回12。