// JS中的数据类型一共就6种
// string boolean number undefined null object
// typeof null => 'object'
// typeof function() {} => 'function'
// 请写一个函数判定一个变量保存的数据是什么类型?
// function check(variable) {
// if (variable === null) {
// console.log("您所传递的变量类型是null");
// return;
// }
// if (typeof variable === "function") {
// console.log("您所传递的变量类型是object");
// return;
// }
// console.log("您所传递的变量的类型是" + typeof variable);
// }
// check(1);
// check("str");
// check(undefined);
// check(true);
// check(null);
// check({});
// check([]);
// check(function() {});
// 引用类型与值类型最大的不同在于内存中的位置
// 内存: 分为堆内存和栈内存
// 所有的变量 存储在 栈内存中 值类型的数据也是存储在栈内存中 引用类型的数据是存储在堆内存中
// 变量的比较: 如果两个变量存储的是值类型数据 则比较值
var a = 10;
var b = 10;
console.log(a == b) // true
// 以下代码
// 开辟一个内存空间 将这个对象存放进去 并返回一个地址 地址给了obj这个变量
// var obj = {}; // xxff00
// 开辟一个内存空间 将这个对象存放进去 并返回一个地址 地址给了obj这个变量
// var obj1 = {}; // xxff01
// 以上两条代码在内存中开辟了两个不同的地址
// 如果判定 obj === obj1 其实是在判定两个变量保存的地址是否是同一个地址
// console.log(obj == obj1); // false
// 引用类型的赋值
// var obj = {};
// var obj1 = obj;
// 第一条代码 开辟一个内存空间 将这个对象存放进去 并返回一个地址 地址给了obj这个变量
// 第二条代码 把obj所保存的那个地址 给了obj1
// 此时 根据obj可以找到这个对象 根据obj1也可以找到这个对象
// 通过obj1给添加的属性
// obj1.name = "随便什么都可以";
// 输出obj 结果是受到了影响
// console.log(obj);
// 说明 obj和obj1的地址是同一个
// (重要)
// = 和 打点的不同
// var obj = {};
// obj.name = "123"; // 这条代码的性质 给这个对象添加属性
// obj = ""; // 这条代码的性质 把对象的地址丢弃 并重新保存了123
// = 和 打点的不同
// var obj = {};
// var obj1 = obj;
// // 打点
// obj.name = 123; // 请问 obj1受不受影响
// obj = ""; // 请问当输出obj1的时候 obj1是什么
// 结论: 对一个保存着引用地址的变量 使用点语法 是在给引用地址添加属性
// 对一个保存着引用地址的变量使用等号 直接把变量保存的地址丢弃 赋值为新内容
// 出题
// var a = function() {
// }
// var b = function() {
// }
// 结果: a的地址与b的地址不同 分别是两个函数