为了账号安全,请及时绑定邮箱和手机立即绑定

javascript中这两种声明变量的方式有什么不同?

javascript中这两种声明变量的方式有什么不同?

倚天杖 2019-02-20 06:15:10
var a = "abc"; var a = new String(); a = "abc"; 第一种的a既是字符串对象 也是 字符串数据类型吗?
查看完整描述

7 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

var a = "abc";

var a = new String();
   a = "abc";
a=123;

javascript是动态类型,但不意味着一个变量可以有多个类型,
var a = "abc";
var a = new String();既是一个变量声明语句,也就一个赋值语句,a类型为一个object
a = "abc";是一个赋值语句,把字符串abc赋值给变量a,a类型变更为字符串,一个基本类型,Undefined,Null,Boolean,Number和String中的一个

a=123;类型又变更为数字类型

更可以

var t=new Date();
t=t.getTime();

t从最初的日期类型变更为数字类型

查看完整回答
反对 回复 2019-03-01
?
跃然一笑

TA贡献1826条经验 获得超6个赞

我也来补充一点关于基本包装类型的
JavaScript变量包括基本类型值引用类型值两种类型,这两种类型一个比较明显的区别是能不能添加、修改、删除其属性和方法,基本类型值是不能动态添加属性的。但为了便于操作基本类型值,ECMAScript提供了3种特殊的引用类型:Boolean Number String ,这些类型除了与其他引用类型相似的操作,还具有与各自类型相应的特殊行为。
比如当你创建一个基本类型值时,后台就会创建一个对应的基本包装类型对象,这样就能调用一些方法来操作数据

var s1 = "some text";
var s2 = s1.substring(2);

这种操作并不是直观的的操作,是由后台自动完成的一系列处理,当执行第二行代码访问s1时,后台实际上自动进行了下面三步处理:

  1. 创建String类型的一个实例;

  2. 在实例上调用指定的方法;

  3. 销毁实例
    就相当于执行了下面的代码:

var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;

引用类型与基本包装类型的区别在于,自动创建的基本包装类型只存在于一行代码的执行瞬间,然后就立即被销毁了,这也是基本类型不能添加属性的原因;

var a = new String(); 

上面就是一种显式的创建基本包装类型的对象,当a声明时是对象,但一旦给a赋值成基本类型,a就变成了基本类型;

var a = new String("abc");
console.log(a);   //String {0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"}
a = "abc";
console.log(a);   //"abc"

总之,尽量不要显示地创建基本包装类型的对象,不然就会很容易搞不清变量类型。要是先搞清类型,多用typeof判断一下啊;

查看完整回答
反对 回复 2019-03-01
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

第一个是直接把一个字符直接量赋值给a.
第二个是用JavaScript 的String构造函数 新建了一个实例。
然后又给a赋值了一个字符串.

查看完整回答
反对 回复 2019-03-01
?
白板的微信

TA贡献1883条经验 获得超3个赞

补充一点

var str="abc"

这个也可以当对象来用,这是因为它变成了基本包装类型。

查看完整回答
反对 回复 2019-03-01
  • 7 回答
  • 0 关注
  • 974 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信