js中字符串是对象吗?

清晨

在javascript中,字符串是基本数据类型,而不是引用数据类型(对象)。

有人会发现,代码中经常会把对象方法在基本数据类型上使用,比如:

console.log("abc".charAt(0)); // a

这是因为,运算符提供了装箱操作,它会根据基础类型构造一个临时对象,使得我们能在基础类型上调用对应对象的方法。

有的人看到js中字符串有length属性和charAt()方法,所以才以为js是对象。

js的一些特性是比较反直觉的,就刚才说的这一点,还有一个例子,我们甚至在原型上添加方法,都可以应用于基本类型,比如以下代码:

Symbol.prototype.hello = () => console.log("hello");

var a = Symbol("a");
console.log(typeof a); // symbol   a 并非对象
a.hello(); // hello 有效