一、基本数据类型
number、string、boolean、undefined、null、以及es6新出的Symbol
代码执行也是占用的内存
对于基本数据类型也就是简单类型来说,变量存储的直接就是值本身。 所以把简单类型叫做值类型。
字符串类型:
在js中,字符串必须使用 ‘’ 或者 ""包裹起来,推荐 使用 单引号 ‘’
var str = '张三';
console.log(str);
var name = "李四";
console.log(name);
var name1 = 'zs';
console.log(name1);
```
字符串有一个**length**的属性,表示字符串中字符的**个数**
```js
var name2 = 'sldkjflskdjflksdjf';
console.log(name2.length);
转义字符
// \" 表示是一个普通的 "字符
// \' 表示普通的'字符串
// \n 表示换行 表示回车键
// \t 制表符 表示按了tab键 一般来说,一个tab键会等于4个空格
var str4 = "离开'他'吧,我偷\"电瓶车\"养你";
console.log(str4);
var str5 = 'abc\tdef';
console.log(str5);
字符串的拼接
// + 表示字符串的拼接, 可以把多个字符串拼成一个字符串
var str = 'hello' + 'world' + '哈哈';
console.log(str);
// + 表示数字的加法,把多个数加起来
var str1 = 11 + 11;
console.log(str1);
var str2 = '11' + 11;
console.log(str2);
var str3 = 11 + '11' + 11;
console.log(str3);
// 加号: 如果+号的两边都是数字,就是加法的功能
// 如果+有一边或者2边字符串,就是拼接字符串的效果。
布尔类型:
// 布尔类型,只有两个值: true(真) 和 false(false)
var flag = false;
console.log(flag);
var flag2 = true;
console.log(flag2);
undefined:
// undefined : 如果一个变量没有赋值,变量的值就是undefined
var num = undefined;
console.log(num);
console.log(undefined);
null:
null 表示的一个空的对象
console.log(null);
二、引用类型
引用类型除 Object 本身外,Date、Array、RegExp 也属于引用类型 。
引用类型也就是复杂数据类型,对于复杂类型来说,由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此变量存储的仅仅是复杂类型的地址, 复杂类型会在内存中单独开辟一块空间来存储。
什么是对象?
对象:一个无序的键值对的集合。
作用:存储一个实体(对象)的所有的属性和方法
创建对象的方式:
创建单个对象
- 字面量的方式
var bz = {
age: 32,
name: '黄XX',
gender: '不详',
height: 180,
weight: 120,
sayName: function() {
console.log('ggg');
},
sing: function() {
console.log('今天给大家唱首歌');
}
}
2 构造函数 new Object()
var obj = new Object();
console.log(obj);
批量创建对象:
- 工厂函数方式
// 批量创建对象 -------工厂函数
function createPerson(name, age, gender) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayHi = function() {
console.log(this.name);
}
return obj;
}
var zs = createPerson('张三', 50, '女');
var ls = createPerson('李四', 100, '男');
zs.sayHi();
ls.sayHi();
2 构造函数:实例化对象
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
this.sayHi = function() {
console.log('大家好');
}
}
var p1 = new Person('张三', 18, '男');
console.log(p1);
var p2 = new Person('李四', 20, '女');
console.log(p2);
new干了什么
1. new会创建一个空的对象, 这个对象的类型就是 Person
2. 让 构造函数内部的this指向这个新对象
3. 执行构造函数
4. 返回这个新的对象
操作对象的属性有两种方式
- 点语法
对象名.属性名
2 []语法, 关联数据的语法,,也可以把对象看成数组
对象名[属性名]
var obj = {
name: 'zs',
age: 18,
gender: '男',
sayHi: function() {
console.log('大家好,我是', this.name);
}
};
//点语法
console.log(obj.age)
// []语法 对象名['属性名'] : 属性名是一个字符串
console.log(obj['age']);
console.log(obj['name']);
obj['hobby'] = 'ls';
console.log(obj);
obj['sayHi']();
obj.sayHi();
二者对比
- 点语法更加简洁 写死 obj.age
- 中括号语法更加灵活, []语法只要保证[]中最终是一个字符串即可。
对象的遍历语法
for(var k in obj){}
var obj = {
name: 'zs',
age: 18,
gender: '男'
}
for(var k in obj) {
console.log(k);
// console.log(obj.k); // obj的k属性
console.log(obj[k]);
}