看第一条结果,为啥不是[object Object]费解,求大神解释
<script>
var name = {sex: '女'};
var name2 = {a: 1};
console.log(Object.prototype.toString.call(name)); // [object String] 按理说这里应该也是[object Object],可以使为啥不是呢?
console.log(Object.prototype.toString.call({sex: '女'})); // [object Object]
console.log(Object.prototype.toString.call(name2)); // [object Object]
console.log(Object.prototype.toString.call({a: 1})); // [object Object]
</script>
如果是string类型,那么toString由特例,是调用的string.toString而不是object.toString,直接返回string,所以object String
(function{
var name = {sex: '女'};
var name2 = {a: 1};
console.log(Object.prototype.toString.call(name)); // [object String] 按理说这里应该也是[object Object],可以使为啥不是呢?
console.log(Object.prototype.toString.call({sex: '女'})); // [object Object]
console.log(Object.prototype.toString.call(name2)); // [object Object]
console.log(Object.prototype.toString.call({a: 1})); // [object Object]
})();
(function(){
var name = {sex: '女'};
var name2 = {a: 1};
console.log(Object.prototype.toString.call(name)); // [object String] 按理说这里应该也是[object Object],可以使为啥不是呢?
console.log(Object.prototype.toString.call({sex: '女'})); // [object Object]
console.log(Object.prototype.toString.call(name2)); // [object Object]
console.log(Object.prototype.toString.call({a: 1})); // [object Object]
})();
name具有特殊之处,它不是javascript的关键字,也不是保留字,页面在IE浏览器上运行正常,但是Safari , chrome , Firefox和Opera这些浏览器都给函数定义了一个非标准的name属性,是window的自带全局属性,所以在全局声明name变量名会出现访问异常问题
不定义变量name,直接 console.log(name),不会报错。
var name = {sex: '女'};
console.log(name.sex) // undefined
var name1 = {sex: '女'};
console.log(name1.sex) // 女
let name = {sex: '女'};
console.log(name.sex) // 女