函数的属性
- name 表示函数名称
- length 表示形参的长度
引用类型与值类型的区别
- 存储
- 值类型存储在栈内存中
- 引用类型存储在堆内存中
- 比较
- 值类型比较的是值
- 引用类型比较的是地址
- 传递参数
- 函数内操作的值类型与函数外无关
- 函数内操作引用类型
- 如果是通过点语法 方括号语法 方法进行操作 会影响到函数外部的值
- 如果是用等号(= 赋值符号)对函数内的变量进行修改 则不会影响到函数外
数组
- 一组有顺序的数据
数组的定义
- 字面量 []
- 构造函数 new Array()
- 如果只有一个参数并且是数字 那么会当作数组的长度
- 其它情况都是当作数组成员
数组的属性
- length 属性 表示数组的长度
- length属性可读可写
- 当把length变长时,会多出许多空值
- 当把length变短时,会切掉一部分尾部的数据
- length属性可读可写
数组的方法
- arr[5] = 6; #通过方法增加一项
- push 尾增 #返回值是数组的长度
- pop 尾删 #并返回该项
- shift 头删 #并返回该项
- unshift 头增 #并返回数组的长度
- concat 拼接 #返回值是连接完毕的新数组,它不会改变原来的数组
- 参数个数不定 如果参数中有数组 会把数组拆开
- reverse 将数组中的每一个成员逆序 #返回值是原数组 也会影响到原数组
- sort 排序方法 通常用于数字 参数是函数 函数中有a b #返回值是连接完毕的新数组,它不会改变原来的数组
arr.sort(function(a, b) {
return b - a;
});- 如果返回a -b 升序排列
- 如果返回 b - a 降序排列
- 如果不传递函数 则按照首位数字进行排序
- slice 用于截取数组中的一段 #返回截取的数组
- 第一个参数是开始截取的位置
- 第二个参数是结束截取的位置(不包含该位置的成员)
- 如果参数是负数 则从后往前数
- 如果不传递第二个参数 则从第一个参数截取到最后
- 如果没有参数 就截取全部
- splice 用于数组的增、删、改 #返回操作后消失的参数,否则 为新增的参数
- 第一个参数表示开始操作的位置
- 第二个参数表示删除的个数
- 之后的每一个参数都表示数组的新成员(如果是数组 不拆)
- 如果没有第二个参数 则默认从第一个参数截取到末尾
- join 用于将数组转为字符串 #返回拼接后的字符串
- 参数是拼接符号 参数默认是 “,”
循环数组
- for 循环
二维数组(了解)
一维数组中的每一位都是数组 这样的数组叫做二维数组
对象
// 数组:指的是一组有顺序的数据。
// 按理来说:数组的每一个成员可以是任意类型
// var arr = [1, “sdfsd”, true, undefined, null];
// 但是,通常情况下我们只推荐在一个数组中存放同一种数据类型的值。
// 有些情况下,数据的类型又不能一致。比如如果想要记录一个人的信息数据
// var name = "张小花";
// var age = 33;
// var sex = "男";
// var height = 180;
// var isMarried = false;
// var money = 120;
// var city = "北京";
// 以上可以用来描述一个人 但是变量略多 而且当要描述许多人时...
// 于是 JS就定义了一个对象数据结构 允许使用 key: value作为一组键值对
// 对象可以有多个key:value对组成
var MrZhang = {
name: "张小花",
age: 33,
sex: "男",
height: 180,
isMarried: false,
money: 120,
city: "北京"
}
// 这就叫做对象
// 这种编程方式,叫做面向对象
console.log(MrZhang);
对象的定义
// 定义对象
// 1 字面量 一组花括号
// var obj = {};
// 2 构造函数式
// var obj = new Object();
// Object、Array都是内置构造函数
// 与之类似的还有 Function、Date、Error、RegExp、String、Number等
// 对象我们现在阶段主要是操作它的属性
// var obj = {
// name: "张小花",
// age: 12,
// sdf : 333
// }
// 对象的定义规范:
// 1 每一组key:value对之间使用逗号分割
// 2 属性名推荐符合变量的命名规范
// 3 如果不符合变量命名规范 必须要加双引号 或者 单引号
// 4 属性值可以是JS中的任何内容 可以是变量 最终会使用变量所保存的值
// var username = "张大花";
// var obj = {
// name: username
// }
// console.log(obj);
对象的属性
// 对象的属性操作
var obj = {
name: “张大花”
}
var sdfff = “hello”;
// 添加属性有两种方式: 1 点语法 2 方括号语法
// 1 点语法
obj.age = 13;
// 2 方括号语法
obj[sdfff] = “你好”; // 此时会去查找length变量 如果找得到就给添加length变量的值那个属性
/*
点语法其实是方括号语法的简写形式 具备更清晰的语义 点就是“的”的意思 如果使用点语法
那么点什么就是什么 它不会去找变量
必须符合变量命名规范
*/
// 读取属性 也是这两种方式
console.log(obj.age);
console.log(obj["hello"]);
console.log(obj["name"]);
// console.log(obj[sdfff]); // 方括号语法里面可以使用变量 所以此时找的就是obj.hello属性
// console.log(obj.sdfff); // 从对象身上读取一个不存在的属性不会报错 只会返回undefined