数据类型
1. 基本数据类型:简单数据段
String:字符串
1)在JS中 使用‘’ “”把字符串包起来 不包 JS会给它当成变量
2)单引号不要嵌套单引号 双引号不要嵌套双引号 外单内双 外双内单
3)string数据类型对应的数据有无数个
number:数字
1)number是一个数据类型,这个数据类型对应的值有无数个。
2)在JS中number数据类型是不分整数和小数 都是number
3)可以通过typeof查看一个变量值的数据类型
4)最大值 (Number.MAX_VALUE)和 最小值(Number.MIN_VALUE)
5)number可以通过不同进制显示 进制 10进制 2进制 16进制 8进制
6)NaN Not a Number 不是一个数字
7)JS中不要对小数运算 要运算先转成整数 得到的结果往往不对
boolean: 布尔类型
1)boolean数据类型对应的值就两个 true false
2)true 和 True 不一样的 JS是区分大小写的
undefiend: 没有值
1)undefiend是一个数据类型,这种数据类型对应的值是undefiend
2)什么时候会出现undeined?
答:一个变量没有赋值 它的值是undefiend 这个值的类型是undefiend 一个函数没有返回值,也是返回undefiend
null: 空
2. 引用数据类型: 多值构成的对象。
object:对象。
array:数组。
function:方法。
3.注意基本数据和引用数据动态的属性。
基本数据类型是按值访问的,因此可以操作保存在变量中实际的值。
引用类型的值是保存在变量中的实际的值。
javascript不允许直接访问内存中的位置。
var person = new Object();
person.name = "xxx";
alert(person.name) // 输出xxx 且不删除情况下只要是person存在 name就会一直存在
//不可以给基本类型添加属性。
var name = "xxx";
name.sex = "yyyy";
alert(name.sex);//undefined 数据没了。但不会报错
4. 数据类型转换
隐式类型转换:
软件自己给你装换了
例: 1) if()括号里自动转型 2)双目运算两侧操作数自动转为同型。
var num = "helloword"
if(num){
conse(1);
}else(
conse(2);
)
/******************************************
运行结果:1.
/******************************************
/*在JS中, 0 -0 "" undefiend null 转换为false,其它值都转成true: */
var num = 123 + "abc";
conse(typeof num);
/******************************************
运行结果:string
/******************************************
强制类型转换:
必须自己写转换:
parseInt(); parseFloat(); Number(); String();
5. 基本数据和引用数据的变量复制赋值问题。
基本类型赋值:如果一个变量向另一个变量赋值基本类型的值,会在变量对象上创建一个新值,然后把该值复制为新变量分配的位置上。
引用类型:当一个变量向另一个变量复制引用类型的值时,同样也会存储变量对象中的值复制一份放到为新变量分配的空间中。但是,这个值的副本其实是一个指针,而这个指针指向储存在堆中的一个对象。(一荣俱荣 一损俱损)
6.基本数据和引用数据的变量传递参数问题
js参数中所有的参数都是按值传递的,也就是说,把函数外部的值复制函数内部的参数就和把值从一个变量复制到另一个变量一样。基本类型值的传递如同基本类型变量的复制一样,而引用类型的值传递就如同引用类型变量复制一样。
例子:基本:基本类型值的传递如同基本类型变量的复制一样
function addTen(){
num+=10;
return num;
}
var count =20;
var result = addTen(count);
alert(count);//20
alert(result);//30
// 说明基本类型是值传递。
引用:引用类型的值传递就如同引用类型变量复制一样。
根据下图 和 图 4-2 理解。
过程略解:1: 程序执行:全局上下文 EC(G) :为全局变量arr会开辟一个堆空间(0x111fff)地址给arr(存储在ECG中)
2: 函数执行,局部上下文EC(f) : 引用类型值传递 ary获取arr的地址 指向(0x111fff)
3: 基本类型值赋值 ,此时 堆(0x111fff)的值已经永久更改
4:ary指向 新开辟的堆空间。(0x222fff)
5: 基本类型值赋值 ,此时 堆(0x222fff)的值已经永久更改
6: 此时输出的时 堆(0x222fff)、函数体执行结束 ,EC(f)消失 ary局部变量 消失
7:最后输出的arr 指向的仍然堆空间(0x111fff)注意 3 步时 更改过数据