文章目录
基本数据类型
基本(值)类型:
1、分类
数值(Number):任意的数字
字符串(String):任意的字符串
undefined:true/false
布尔(boolean):true/false
null:null
对象(引用)类型:
Object :任意对象
Function :一种特别的对象(可以执行)
Array :一种特别的对象(数值下标,内部数据是有序的 )
2、判断
typeof : 可以判断:undefined/ 数值 / 字符串 / 布尔值 / function
不能判断: null 与 object objcet 与 array
instanceof : 专门用来判断对象数据的类型:Object、Array、与Function=== : 可以判断 :undefind和null
相关问题
1. undefined与null的区别?
undfined代表定义了,未赋值
null定义并赋值了,只是值为null2. 什么时候给变量赋值为null呢?
初始赋值,表明将要赋值对象
结束前,让对象成为垃圾对象(被垃圾回收器回收)3. 严格区别变量类型与数据类型?
数据的类型
基本类型
对象类型变量的类型(变量内存值的类型)
基本类型:保存的就是基本类型的数据
引用类型:保存的是地址值
// 类型: 类型对象
function Person (name,age) { //构造函数 类型
this.name = name;
this.age = age;
}
var p = new Person('Tom',12); //根据类型创建的实例对象
// Person('jack',12)
// 1、undefined与null的区别?
var a;
console.log(a); // undefined
a = null;
console.log(a); // null
var b = null; // 初始赋值为null,表明将要赋值为对象
// 确定对象就赋值
b = ['网吧',12];
// 最后 释放数组所占的内存
b = null; // 让b指向的对象成为垃圾对象(被垃圾回收器回收)
// b = 2;
// var c = {}; // c的里面存了对象的地址值
var c = function() { // 函数的地址值保存在c中
}
console.log(typeof c); // 'function'
数据_变量_内存
1. 什么是数据?
存储在内存中代表特定信息的东西,本质是0101…
数据的特点:可传递,可运算
一切皆数据
内存中所有操作的目标:数据
- 算术运算
- 逻辑运算
- 赋值
- 运行函数
2. 什么是内存?
内存条通电后产生的可储存数据的空间(临时的)
内存产生和死亡:内存条(电路板)== >通电产生== >内存空间== >存储数据== >处理数据== >断电== >内存空间和数据都消失
一块小内存的2个数据:内部存储的数据 地址值的数据内存分类
栈:全局变量/局部变量
堆:对象3. 什么是变量?
可变化的量,由变量和变量值组成
每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据4. 内存、数据、变量三者之间的关系
内存用来存储数据的空间
变量是内存的标识
var age = 18;
var a = 2;
console.log(age);
var obj = {name:'Tom'};
console.log(obj.name);
function fn() {
var obj ={name:'Tom'}
}
var a = 3;
var b = a + 2;
相关问题
问题:var a = xxx,a内存中到底保存的是什么
xxx是基本数据类型,保存的就是这个数据 xxx是对象,保存的是对象的地址值
xxx是一个变量,保存的xxx的内存内容(可能是基本数据,也可能是地址值)
var a = 3;
a = function() {
}
var b = 'abc';
a = b;
b = {}
a = b;
问题:关于引用变量赋值
2个引用变量指向同一个对象,通过一个变量修改对象内部数据,其他所有变量看到的是修改以后的数据
2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象
// var obj1 = {name:'Tom'}
// var obj2 = obj1;
// boj1.name = 'jack';
// console.log(obj2.name); // 'jack'
var obj1 = {name:"Tom"};
var obj2 = obj1;
obj2.age = 12;
console.log(obj1.age); // 12
function fn(obj) {
obj.name = 'A';
}
fn(obj1);
console.log(obj2.name); // 'Bob'
var a = {age: 12};
var b = a;
a = {name: 'Bob',age : 13};
b.age = 14;
console.log(b.age,a.name,a.age); // 14 'Bob 13'
function fn2(obj) {
obj = {age:15}
}
fn2(a);
console.log(a.age);
问题:在js调用函数时传递变量参数时,是值传递还是引用传递
理解1:都是值(基本/地址值)传递
理解2:可能是值传递,也可能是引用传递(地址值)
var a = 3;
function fn(a) {
a = a + 1; // 左边的a对应局部变量,右边的a对应的是全局变量
}
fn(a);
console.log(a);
function fn2(obj) {
console.log(obj.name);
}
var obj = {name:'Tom'};
fn2(obj)
问题:JS引擎如何管理内存?
- 内存声明周期
分配小内存空间,得到他的使用权
存储数据,可以反复进行操作
释放小内存空间 - 释放内存
局部变量:函数执行完自动释放
对象:成为垃圾对象===>垃圾回收器回收