声明对象,访问对象属性
// 声明一个产品对象,里面包含以下信息
// 对象是一个产品信息可以命名为: goods
// 商品名称:name
// 商品编号:num
// 商品毛重:weight
// 商品产地:address
let goods = {
name: 'xiaomi',
num: 1,
weight: '190克',
addrss: '中国'
}
// 访问对象中的属性
// 两种访问方式,对象名 .属性名
console.log(goods.name);
// 对象名[''] ,注意用中括号里面属性名要用引号
console.log(goods['num']);
console.log(goods['weight']);
遍历对象
要遍历对象的属性值 用英文中阔号 [ ]
<script>
let person = {
name: '李狗蛋',
age: 18,
sex: '男'
}
// 利用 for in 遍历对象 key 代表属性名
for (let key in person) {
// 在遍历属性名
console.log(key);
// 在遍历对象的时候不能用 对象名.key的这种方式获取对象中的属性值
// 意为访问当前对象叫key的属性名,而当前没有叫key的属性名,
//所以控制台输出为 undefined
console.log(person.key);
// 当前遍历的属性值
console.log(person[key]);
}
</script>
扩展 not 选择器
**选中不是p的标签 **
数组对象
意为 数组里面的是对象
<script>
// 数组对象
let students = [
{ name: '李狗蛋', age: 18, gender: '男', hometown: '广东省' },
{ name: '张翠花', age: 19, gender: '女', hometown: '四川省' },
{ name: '赵铁柱', age: 17, gender: '男', hometown: '广西省' },
{ name: '钱多多', age: 18, gender: '女', hometown: '湖南省' }
]
// 怎么得到李狗蛋这个名字
console.log(students[0].gender);
console.log(students[1].name);
</script>
结果
数学内置对象(数学高手)
<script>
console.log(Math);
// Math.random() 求从0 - 1 的随机数(包括0 不包括1)
console.log(Math.random())
// Math.ceil() 向上取整
// console.log(Math.ceil(1.1));
// console.log(Math.ceil(1.9));
// console.log(Math.ceil(0.9));
// console.log(Math.ceil(-0.9));
// console.log(Math.ceil(-2.1));
// Math.floor() 向下取整
// console.log(Math.floor(1.1));
// console.log(Math.floor(1.9));
// console.log(Math.floor(2.1));
// console.log(Math.floor(-2.1));
// console.log(Math.floor(-1.1));
// Math.max() 求最大值
// console.log(Math.max(9, 3, 1, 45, 0));
// Math.min() 求最小值
// console.log(Math.min(9, 3, 1, 45, 0));
// 四舍五入 Math.round()
// console.log(Math.round(1.1));
// console.log(Math.round(1.4));
// console.log(Math.round(1.5));
// console.log(Math.round(1.8));
// 幂运算
// console.log(Math.pow(2, 10));
</script>
随机数
<script>
// 0 - 10的随机数
// Math.random() -> [0, 1)
// Math.random() * 10 -> [0,10)
// 向下取整 Math.floor()
// Math.random() * 11 -> [0,11)
// console.log(Math.floor(Math.random() * 11));
// 5 - 10的随机数
// 0 - 5的随机数 + 5
// console.log(Math.floor(Math.random() * (5 + 1)) + 5);
// 3 - 5的随机数 先做 0 - 2的随机数 Math.floor(Math.random() * (2 + 1))+3
// min - max 的随机数
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min
}
console.log(getRandom(20, 40))
</script>
随机点名
<script>
// 封装随机数函数
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min
}
// 声明一个数组
let arr = ['赵云', '黄忠', '关羽', '张飞', '马超', '刘备', '曹操']
// 生成1个随机数 作为数组的索引号并 输出索引对应元素
let num = getRandom(0, arr.length - 1)
document.write(arr[num])
</script>
**简单数据类型存储 和引用数据类型存储的不同:简单数据类型存储在 栈 里的是 值
而引用数据类型存储在 栈 里的是地址**
let obj1 = {
name: '李狗蛋',
age: 18
}
let obj2 = obj1
obj2 = {}
console.log(obj1);
当把obj1 赋 给obj2 时 ,打印obj2是 obj1的内容,再给obj 新的内容不会修改obj1的内容
let arr1 = ['李狗蛋', '张翠花']
let arr2 = arr1
arr2[0] = '赵铁柱'
console.log(arr2);
console.log(arr1);
同样arr1 赋给 arr2 ,这时 改arr2里的某一项,再去打印arr1时会发现arr1里的也一起改了,(也就是arr2得到的是 arr1 存在栈里的地址,而修改时 也按照这个地址去到堆里修改了 值)