扫码关注官方订阅号
var a = "abc"; var a = new String(); a = "abc";
第一种的a既是字符串对象 也是 字符串数据类型吗?
人生最曼妙的风景,竟是内心的淡定与从容!
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中的一个
var a = "abc";
var a = new String();
a = "abc";
abc
a=123;类型又变更为数字类型
a=123;
更可以
var t=new Date(); t=t.getTime();
t从最初的日期类型变更为数字类型
t
var s = "bugall"; var s2 = new String("bugall"); console.log(typeof(s)); //输出的是 string console.log(typeof(s2)); //输出的 object
通过new,它返回一个新创建的 String 对象String 是构造函数,string是变量的一个类型typeof String 是object对应的有相应的原型方法typeof string 是 stringString('xxx') 返回的是一个字符串。String有属性和方法,而string没有。
应用举例:
a = "foo" a.b = "bar" alert("a.b = " + a.b); //Undefined A = new String("foo"); A.b = "bar"; alert("A.b = " + A.b); // bar
我也来补充一点关于基本包装类型的JavaScript变量包括基本类型值和引用类型值两种类型,这两种类型一个比较明显的区别是能不能添加、修改、删除其属性和方法,基本类型值是不能动态添加属性的。但为了便于操作基本类型值,ECMAScript提供了3种特殊的引用类型:Boolean Number String ,这些类型除了与其他引用类型相似的操作,还具有与各自类型相应的特殊行为。比如当你创建一个基本类型值时,后台就会创建一个对应的基本包装类型对象,这样就能调用一些方法来操作数据
var s1 = "some text"; var s2 = s1.substring(2);
这种操作并不是直观的的操作,是由后台自动完成的一系列处理,当执行第二行代码访问s1时,后台实际上自动进行了下面三步处理:
创建String类型的一个实例;
在实例上调用指定的方法;
销毁实例就相当于执行了下面的代码:
var s1 = new String("some text"); var s2 = s1.substring(2); s1 = null;
引用类型与基本包装类型的区别在于,自动创建的基本包装类型只存在于一行代码的执行瞬间,然后就立即被销毁了,这也是基本类型不能添加属性的原因;
上面就是一种显式的创建基本包装类型的对象,当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判断一下啊;
第一个是直接把一个字符直接量赋值给a.第二个是用JavaScript 的String构造函数 新建了一个实例。然后又给a赋值了一个字符串.
补充一点
var str="abc"
这个也可以当对象来用,这是因为它变成了基本包装类型。
尽量不要使用String的包装器。每个String的包装器都占一块独立内存。而且不能拿双等或者三等号来比较它。
@kikong 说的很对。javascript 是动态类型。变量赋值是可以改变类型的。
var a = new String(); a = "abc";
上面两次赋值的结果和
var a = "abc";
是一模一样的。也就是说第一次赋值有点 “脱裤子XX” 的感觉,白费这劲。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
javascript是动态类型,但不意味着一个变量可以有多个类型,
var a = "abc";var a = new String();既是一个变量声明语句,也就一个赋值语句,a类型为一个objecta = "abc";是一个赋值语句,把字符串abc赋值给变量a,a类型变更为字符串,一个基本类型,Undefined,Null,Boolean,Number和String中的一个a=123;类型又变更为数字类型更可以
t从最初的日期类型变更为数字类型通过new,它返回一个新创建的 String 对象
String 是构造函数,string是变量的一个类型
typeof String 是object对应的有相应的原型方法
typeof string 是 string
String('xxx') 返回的是一个字符串。String有属性和方法,而string没有。
应用举例:
我也来补充一点关于基本包装类型的
JavaScript变量包括基本类型值和引用类型值两种类型,这两种类型一个比较明显的区别是能不能添加、修改、删除其属性和方法,基本类型值是不能动态添加属性的。但为了便于操作基本类型值,ECMAScript提供了3种特殊的引用类型:Boolean Number String ,这些类型除了与其他引用类型相似的操作,还具有与各自类型相应的特殊行为。
比如当你创建一个基本类型值时,后台就会创建一个对应的基本包装类型对象,这样就能调用一些方法来操作数据
这种操作并不是直观的的操作,是由后台自动完成的一系列处理,当执行第二行代码访问s1时,后台实际上自动进行了下面三步处理:
创建String类型的一个实例;
在实例上调用指定的方法;
销毁实例
就相当于执行了下面的代码:
引用类型与基本包装类型的区别在于,自动创建的基本包装类型只存在于一行代码的执行瞬间,然后就立即被销毁了,这也是基本类型不能添加属性的原因;
上面就是一种显式的创建基本包装类型的对象,当a声明时是对象,但一旦给a赋值成基本类型,a就变成了基本类型;
总之,尽量不要显示地创建基本包装类型的对象,不然就会很容易搞不清变量类型。要是先搞清类型,多用typeof判断一下啊;
第一个是直接把一个字符直接量赋值给a.
第二个是用JavaScript 的String构造函数 新建了一个实例。
然后又给a赋值了一个字符串.
补充一点
这个也可以当对象来用,这是因为它变成了基本包装类型。
尽量不要使用String的包装器。每个String的包装器都占一块独立内存。而且不能拿双等或者三等号来比较它。
@kikong 说的很对。javascript 是动态类型。变量赋值是可以改变类型的。
上面两次赋值的结果和
是一模一样的。也就是说第一次赋值有点 “脱裤子XX” 的感觉,白费这劲。