引用数据类型之普通对象(object)

把多组键值对用大括号包起来 ,并且属性与属性之间用“逗号”进行分割

语法:

  1. var obj={
  2. 属性名1:属性值,
  3. 属性名2:属性值
  4. ......
  5. }
  6. var obj={
  7. "name":"lili",
  8. "age":18
  9. }

属性名和属性值

  • 属性名:就是用来描述某种特征或者特点的名字,(又被称作键,key)
  • 属性值:就是这个特征的具体值(又被称作值,value)
  • 合称键值对

基本操作:增、删、改、查

1、获取属性值的获取

对象的属性名一般都是字符串格式(还可以是数字格式),属性值可以是任意类型数据

  • 对象.属性名;
  • 对象[‘属性名’];

    注意:如果对象里面没有这个属性名,得到的值就是“undefined” ``` var obj={ “name”:”lili”, “age”:18 }

console.log(obj.name); console.log(obj[“name”])

<a name="uuKY5"></a>
### 2、增、改
> 对象的属性名(键)是不允许重复的,之前没有这个属性则为新增,之前有这个属性,则是修改对应的属性值
> 如果原来的对象中没有那个属性名,就是新增,如果有就是修改

var obj={ “name”:”lili”, “age”:18 }

obj.name=”dawei”;====>修改 obj.sex=”男”=====》 增加 console.log(obj)

<a name="FezbT"></a>
### 3、删除

- 彻底删除  delete 对象["属性名"]
- 只是让对象中的属性值为空, obj["属性名"]=null;

var obj={ “name”:”lili”, “age”:18 }

delete obj[“age”]; obj.name=null; console.log(obj);


<a name="tDJAY"></a>
### 4、思考题:

var obj={ name:”lili”, age:18 } var name=”zhufengpeixun”; console.log(obj.name); console.log(obj[“name”]); console.log(obj[name]);

<a name="vrwGi"></a>
### 5、属性名是数字格式
     对象的属性名只能是数字或者字符串,如果是数字的话不能用obj.数字,会报错:<br />   Uncaught SyntaxError: Unexpected number;  //语法错误
<a name="m5tV6"></a>
### 6、注意:

-  对象的属性名不能是引用数据类型值 
   - 基于 对象[属性名] 的方式操作,需要保证属性名是一个值(字符串/数字/布尔等都可以),如果不是值而是一个变量,它会把变量存储的值作为对象的属性名进行操作
   - 基于 对象.属性名 的方式操作,属性名就是点后面的
```javascript
let n = {
  x: 100
};
let m = [100, 200];
let obj = {};
obj[n] = "珠峰"; 
obj[m] = "培训"; 
console.log(obj);

引用数据类型之数组简单了解

  • 用中括号([])包含以逗号分隔的元素列表
  • 数组是特殊的对象:
    • 1.它的属性名是数字,数字从零开始,逐级递增,每一个数字代表着当前项的位置 =>我们把这种数字属性名叫做“索引”
    • 2.默认有一个length属性存储数组的长度
      let arr = [10, 20, 30];
      console.log(arr[0], arr[1], arr[2]);
      console.log(arr.length);
      console.log(arr['length']);
      

      数据类型之间的转换

      之前我们学的知识基本数据类型之间的转换
      那如果带有引用数据类型呢?

      Number()

  • 对象转换为数字:先把对象转换为字符串,再把字符串转为数字
    + 普通对象
    + 数组对象

    1、普通对象转换为数字类型

    /*
    * 1.先把obj转化为字符串 "[object Object]"
    * 2.把字符串转换为数字 Number("[object Object]") 
    */
    let obj={x:100};
    console.log(Number(obj)); //=>NaN
    

    2、数组转换为数字类型

    ```javascript /*
  • 1.先把arr转换为字符串: “10”
  • 2.在把”10”转换为数字:10 / let arr = [“10”]; console.log(Number(arr)); //=>10 /
    • 1.先把ARR转换为字符串: “10,20”
    • 2.在把”10,20”转换为数字:NaN */ arr = [“10”, “20”]; console.log(Number(arr)); //=>NaN

console.log(Number([])); //=> []->’’ Number(‘’)->0 console.log(Number([‘AA’])); //=> [‘AA’]->’AA’ Number(‘AA’)->NaN

<a name="bPiL4"></a>
## String()
<a name="saQZq"></a>
### 1、普通对象转换为字符串
普通对象转换为字符串都是 "[object Object]"
<a name="W5Xkl"></a>
### 2、数组转换为字符串
数组对象转换为字符串是 "第一项,第二项..."(逗号分隔数组中的每一项)
<a name="WIWZg"></a>
## Boolean()
除了0 "" NaN undefined  null  其他都是true
<a name="ysjYx"></a>
### 1、普通对象转换为布尔值
<a name="g2egl"></a>
### 2、数组转换为布尔值
<a name="qgmBc"></a>
# 基础调试代码
```javascript
var num=0;
// 1、打印
console.log(num);
function fun(){}
// 2、详细输出
// console.dir输出一个对象或者一个值的详细信息;
// console.log可以一次性输出多个值,但是dir不可以;
console.log(fun,10,100);
console.dir(fun);
// 3、弹框的时候,会把数据转为字符串(toString)
// alert是在浏览器窗口中弹出一个提示框,提示框中输出指定的信息
// 需要等到alert弹出框,点击确定关闭后,后面的代码才会继续执行
var obj={name:"lili"};
// alert(obj); 
//4、提示框,如果点击是确定,返回值就是true,如果点击的是取消,返回值就是false
// confirm相对于alert来说,给用户提供了确定和取消两种选择
 var res=confirm("你准备好了吗?");
 console.log(res);
//5、带输入框的提示框: 返回值,如果点击的是确定,返回的就是你输入的内容,
// 如果点击是取消是null
var res2=prompt("你是男孩还是女孩?");
console.log(res2);

浅谈js运行机制

(堆栈内存和不同数据类型的操作方式)

堆(heap)栈(stack)内存

浏览器加载页面,运行代码的时候:

  • 每打开一个页面,就会从计算机的内存条中分配出两块内存:堆内存(heap)和栈内存(stack)
  • 堆内存(heap):
    • 主要存放引用数据类型的值
  • 栈内存(stack):
    • 给代码提供可执行的环境
    • 存贮基本数据类型的值

      1、思考题:

var a=12;
var b=a;
console.log(b);
var obj1={"name":"lili","age":12};
var obj2=obj1;
obj2.age=18;
console.log(obj1.age);

1、浏览器打开页面的时候会划分两块内存,堆内存和栈内存:

  • 栈内存的作用:
    • 1、给js提供一个可运行的环境
    • 2、存储基本数据类型的值
  • 堆内存的作用:存放引用数据类型,对象的话存贮的就是键值对,如果是函数,把整个函数当成字符串进行存储

2、代码自上往下执行 (之前还有一个变量提升阶段,会在后面的课程中进行讲解)
====> 基本数据类型:存在栈内存中, 按值操作
====> 引用数据类型的值比较复杂,存在堆内存中,按引用地址的操作

3、赋值操作的三步曲:
+ 先创建值
+ 再创建变量
+ 最后把创建的变量和值关联在一起

image.png

2、练习题

2.1

var a={
                n:12
            }
var b=a;
b={
        n:13
    }
console.log(a.n);

image.png
2.2

var obj={
    n:10,
    b:obj.n*10
}
console.log(obj.b);

在js中用来检测数据类型的四种方式

  • typeof
  • instanceof
  • constructor
  • Object.prototype.toString.call()

typeof 运算符 详解

  typeof 首先返回的是一个字符串,它返回的类型.
  • ‘number’
  • ‘string’
  • ‘boolean’
  • ‘undefined’
  • ‘object’
  • ‘function’

特点:

  • typeof null 的结果是 “object”(这个是浏览器的BUG:所有的值在计算中都已二进制编码存储,浏览器中把前三位是000的当做对象,而null的二进制前三位就是000,所以被识别为对象。
  • typeof 普通对象/数组对象/正则对象… 结果都是”object”,这样就无法基于typeof区分是普通对象还是数组对象等了
typeof 12  ===> "number"
typeof "zhufeng" ====》 'string'
typeof false   ===>'boolean'
typeof true ====>  'boolean'
typeof null ====> 'object'
typeof undefined ====>'undefined'
typeof [1,2] =====>"object"
typeof function(){} =>"function"

BAT面试题

1、

typeof []

typeof typeof []

typeof typeof typeof typeof typeof []