JS中数据类型
String 字符串
Number 数值
Boolean 布尔值
Null 空值
Undefined 未定义
以上五种属于基本数据类型,以后看到的值只要不是上面这5种全都是对象.
基本数据类型的特点
基本数据类型都是单一的值,值和值之间没有任何的联系
在JS种来表示一个人的基本信息(name gemder age)
var name = "张";
var gender = "男"
var age = 18;
如果使用基本数据类型的数据,我们所创建的变量都是独立的,不能成为一个整体
对象:
复杂的数据,一个变量中存储多个数据
对象的分类
内建对象
由ES标准中定义的对象,在任何的ES的实现中都可以使用
比如:Math String Number Boolean Function Object...
宿主对象
由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
比如: BOM DOM
自定义对象
由开发人员自己创建的对象
定义:
var obj = new Object( )
var obj = { }
定义有数据的对象
var obj {
key1:value1,
key2:value2,
key3:value3
}
创建对象
使用new关键字调用的函数,是构造函数constructor
构造函数时专门用来创建对象的函数
使用typeof检查一个对象时,会返回object
var obj = new Object();
console.log(obj) // [object Object]
设置数据:
在对象中保存的值称为属性,向对象中添加属性
对象.属性名 = 值
对象['属性名'] = 值
obj.name = "张";
obj.gender = "男";
obj.age = 18
对象中的键其实都是字符串,我们在定义对象的时候为了方便,可以省略引号
如果使用一个变量代表对象的键,就必须使用 [] 语法,因为 . 的语法有歧义
对象中的键是唯一的
获取对象中的数据:
obj.键
obj['键']
修改对象的属性值
obj.属性名 = 新值
删除语法:
delete 对象.键
delete 对象['键']
向对象中添加属性
obj.name = "孙悟空"
对象的属性值可以是任何的数据类型,也可以是个函数
调方法和掉函数只是名称上的区分,本质上没有区别
obj.sayName = function(){
console.log(obj.name)};
// 调方法
obj.sayName() //孙悟空
// 调函数
fun()
函数也可以称之为对象的属性
如果一个函数作为一个对象的属性保存
那么我们称这个函数是这个对象的方法
调用这个函数就说调用对象的方法(method)
对象字面量
使用字面量来创建一个对象
var obj = {}
使用对象字面量,可以在创建对象时,直接指定对象中的属性
语法:
var obj {
key1:value1,
key2:value2,
key3:value3
}
对象的遍历:
对象遍历 : 访问对象中每一个键值对
语法:
for(var 变量 in 对象) {
变量 - 每一个对象中的属性名
}
将对象转成字符串
定义一个容器 var str = ' '
var s = ' '
for(var key obj) {
str = str + s + key + '=' + obj[key]
s = '&'
}
console.log(str);
统计每个字符串出现的个数
<script>
var str = 'abaabcdd'
var obj = {}
for (var s = 0; s < str.length; s++) {
console.log(str[s]); // 字符串中每个字符
// 将每个字符都作为对象的属性
if (obj[str[s]] >= 1) {
obj[str[s]] = obj[str[s]] + 1
} else {
obj[str[s]] = 1
}
}
console.log(obj);
</script>
in运算符
通过该运算符可以检查一个对象中是否含有指定的属性
如果有则返回true,没有则返回false
语法:
"属性名" in 对象
例:
console.log("test" in obj) //false
数据类型
基本数据类型
String Number Boolean Null Undefined
引用数据类型
Object
栈和堆
JS中的变量都是保存到栈内存中存储
基本数据类型的值直接在栈内存中存储
值与值之间是独立存在的,修改一个变量不会影响到其他的变量
引用数据类型的值是保存到堆内存中的,每创建一个新的对象,就会在内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用,如果两个变量保存的是同一个对象引用,当一个变量修改属性时,另一个也会受到影响
当比较两个基本数据类型的值时,就是比较值
而比较两个引用数据类型时.它是比较低的对象的内存地址. 如果两个对象是一摸一样的,但是地址不同,它也会返回false
枚举对象中的属性
枚举对象中的属性
使用for...in 语句
语法:
for (var 变量 in 对象){
}
var obj = {
name:"孙悟空"age:18
gender:"男"
adress:"花果山"
}for (var n in obj){
// console.log(n) // n是属性名console.log(obj[n]) //[ ] 可以传变量
}