引用数据类型之普通对象(object)
把多组键值对用大括号包起来 ,并且属性与属性之间用“逗号”进行分割
语法:
var obj={属性名1:属性值,属性名2:属性值......}var obj={"name":"lili","age":18}
属性名和属性值
- 属性名:就是用来描述某种特征或者特点的名字,(又被称作键,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、普通对象转换为数字类型
/* * 1.先把obj转化为字符串 "[object Object]" * 2.把字符串转换为数字 Number("[object Object]") */ let obj={x:100}; console.log(Number(obj)); //=>NaN2、数组转换为数字类型
```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):
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、赋值操作的三步曲:
+ 先创建值
+ 再创建变量
+ 最后把创建的变量和值关联在一起
2、练习题
2.1
var a={
n:12
}
var b=a;
b={
n:13
}
console.log(a.n);

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 []
