jsday08

对象

对象的操作(另一种)

var obj = {
     'name': 'jack',
     age: 18,
     'aaa$bbb': 'test',
     1: 666
 }

对象名['键名'] = 值

 obj.sex = 1
 alert(obj.sex)

delete 对象名['键名'] = 值

 alert(obj['1'])
 delete obj['1']
 alert(obj['1'])

对象名['键名'] = 值

 alert(obj['aaa$bbb'])
 obj['aaa$bbb'] = 888
 alert(obj['aaa$bbb'])

对象名['键名']

 var a = 2
 alert(obj[a]) // 因为不存在这个键名 所以报undefined错误

对象的遍历

使用 for in 循环来遍历对象

var obj = {
  name: 'Jack',
  age: 18
}
for (var key in obj) {
  console.log(key)
}
// 会在控制台打印两次内容,分别是 name 和 age
  • for in 循环的遍历是按照对象中有多少成员来决定了

  • 有多少成员,就会执行多少次

  • key 是我们自己定义的一个变量,就和 for 循环的时候我们定义的 i 一个道理

  • 在每次循环的过程中,key 就代表着对象中某一个成员的 属性名

数据类型赋值区别

var a = 100; // 在栈内存开辟一个独立的空间
var b = a; //  先给b在栈内存开辟一个空间 然后a中的100 给到 b 
// 两个空间各自独立 
alert(a);  // 100
alert(b); // 100
b = 200;      
alert(a); //100 修改b 不影响a       
alert(b); //200 
var a = {name:'zhangsan'} // 栈内存中开辟空间 起名a  堆内存开辟空间
var b = a;  // 栈内存开辟空间b 堆内存的地址赋值给a a b就同时指向一个堆内存地址
console.log(a.name)// zhangsan
console.log(b['name'])// zhangsan
​
b.name = 'lisi'  // 所以修改b 就会影响a
console.log(a.name)// lisi
console.log(b['name'])// lisi

面试题

 var obj = {'name':'rose'};
 function test(){
     obj.name = 'jack';
     obj = {};
     obj.name = 'jerry';
     console.log(obj.name);
 }
 test();
 console.log(obj.name);
 // ver obj = {} 表示 obj 是一个空对象
 var obj = {'name':'**'}
 function test(){
     obj.name = '^^'
     obj = {}
     obj.name = '@@@'
     console.log(obj.name)
 }
 test()
 console.log(obj.name)

在堆内存开辟一个空间 0xf001 name:rose 然后把地址给到栈内存的obj

test 函数执行

obj.name = 'jack' 访问全局变量给 0xf001空间内的name 改为 jack

obj = {} 给obj全局变量进行赋值 在堆内存开辟了一个空间 0xf002 然后把这个地址给到栈内存obj

obj 内的地址就变成了 0xf002

obj.name = 'Jerry'

访问全局变量 给0xf002空间 添加一对 name: 'jerry'

console.log(obj.name)访问全局变量 也就访问0xf002这个空间 根据键取到 jerry

函数执行完毕

console.log(obj.name)访问全局变量 也就访问0xf002这个空间 根据键取到 jerry

数组

数组是一个 数据的集合

把一些数据放在一个盒子里面,按照顺序排好

[1, 2, 3, 'hello', true, false]

数组的建立

字面量创建一个数组

  • 直接使用 [] 的方式创建一个数组

    // 创建一个空数组
    var arr1 = []
    // 创建一个有内容的数组
    var arr2 = [1, 2, 3]
    

内置构造函数创建数组

  • 使用 js 的内置构造函数 Array 创建一个数组

    // 创建一个空数组
    var arr1 = new Array()
    // 创建一个长度为 10 的数组
    var arr2 = new Array(10)
    // 创建一个有内容的数组
    var arr3 = new Array(1, 2, 3)
    

数组的属性

数组的length

  • length 就是表示数组的长度,数组里面有多少个成员,length 就是多少

数组的索引

  • 索引,也叫做下标,是指一个数据在数组里面排在第几个的位置

  • 索引都是从 0 开始的

  • 想获取数组中的第几个就使用 数组[索引] 来获取

    var arr = ['hello', 'world']
    console.log(arr[0]) // hello
    console.log(arr[1]) // world
    

冒泡排序

先遍历数组,挨着的两个进行比较,如果前一个比后一个大,那么就把两个交换位置

数组遍历一遍以后,那么最后一个数字就是最大的那个了

然后进行第二遍的遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二的位置

以此类推,最后就会按照顺序把数组排好了

// 冒泡排序
// 18 2 20 33 1 13
 var sum = [18, 2, 20, 33, 1, 13];
 for (var i = 0; i < sum.length-1; i++) {
     for (var j = 0; j < sum.length - 1 - i; j++) {
         if (sum[j] > sum[j + 1]) {
             var num = sum[j + 1];
             sum[j + 1] = sum[j];
             sum[j] = num;
         }
     }
     document.write(sum+"<br>");
 }
 document.write("交换完以后"+sum+"<br>");

选择排序

先假定数组中的第 0 个就是最小的数字的索引

然后遍历数组,只要有一个数字比我小,那么就替换之前记录的索引

知道数组遍历结束后,就能找到最小的那个索引,然后让最小的索引换到第 0 个的位置

再来第二趟遍历,假定第 1 个是最小的数字的索引

在遍历一次数组,找到比我小的那个数字的索引

遍历结束后换个位置

依次类推,也可以把数组排序好

var nums = [8, 4, 2, 6, 3, 7, 1, 5, 9];
for (var i = 0; i < nums.length; i++) {
    var minIndex = i; 
    for (var j = i+1; j < nums.length; j++) {
        if (nums[j] < nums[minIndex]) {
            minIndex = j;
        }
    }
    var num = nums[i];
    nums[i]=nums[minIndex];
    nums[minIndex] = num;
    document.write(nums + "<br>");
}
document.write("交换完以后" + nums);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值