暂无 |

12.复杂数据类型如何转变为字符串

A
B
C
D
答案:

  • 首先,会调用 valueOf 方法,如果方法的返回值是一个基本数据类型,就返回这个值,
  • 如果调用 valueOf 方法之后的返回值仍旧是一个复杂数据类型,就会调用该对象的 toString 方法,
  • 如果 toString 方法调用之后的返回值是一个基本数据类型,就返回这个值,
  • 如果 toString 方法调用之后的返回值是一个复杂数据类型,就报一个错误。

解析:

1;
var obj = {
  valueOf: function() {
    return 1;
  }
};
console.log(obj + ""); //'1'
2;
var obj = {
  valueOf: function() {
    return [1, 2];
  }
};
console.log(obj + ""); //'[object Object]';
3;
var obj = {
  valueOf: function() {
    return [1, 2];
  },
  toString: function() {
    return 1;
  }
};
console.log(obj + ""); //'1';
4;
var obj = {
  valueOf: function() {
    return [1, 2];
  },
  toString: function() {
    return [1, 2, 3];
  }
};
console.log(obj + ""); // 报错 Uncaught TypeError: Cannot convert object to primitive value

拓展:

var arr = [new Object(), new Date(), new RegExp(), new String(), new Number(), new Boolean(), new Function(), new Array(), Math] console.log(arr.length) // 9
for (var i = 0; i < arr.length; i++) {
	arr[i].valueOf = function() {
		return [1, 2, 3]
	}
	arr[i].toString = function() {
		return 'toString'
	}
	console.log(arr[i] + '')
}

1、若 return [1,2,3]处为 return "valueof",得到的返回值是 valueof toString 7valueof 说明:其他八种复杂数据类型是先调用 valueOf 方法,时间对象是先调用 toString 方法

2、改成 return [1,2,3],得到的返回值是 9toString 说明:执行 valueof 后都来执行 toString

解释:
js基础三
js基础四

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论