JavaScript07

1.对象

(1)检测属性是否存在

对象.属性名 === undefined true -> 不存在 false -> 存在
对象.hasOwnProperty(‘属性名’) true -> 存在 false -> 不存在
‘属性名’ in 对象 true -> 存在 false -> 不存在

//检测属性是否存在
//true -> 不存在   false -> 存在
//console.log( emp.sex === undefined );
//true -> 存在   false -> 不存在
//console.log( emp.hasOwnProperty('phone') );
//true -> 存在   false -> 不存在
//console.log( 'ename' in emp );

练习:创建一个商品对象,包含商品的编号、标题、价格属性;如果颜色属性不存在,则添加该属性;如果价格属性存在,则打八折,最后打印对象。

var laptop = {
  lid: 3,
  title: '小米Air',
  price: 4200
};
//如果不存在
if(laptop.color === undefined){
  laptop.color = '白色';
}
//如果存在
if( laptop.hasOwnProperty('price') ){
  //打八折
  laptop.price *= 0.8;
}
console.log(laptop);
(2)对象中的方法

方法对应的是一个函数

//方法
function fn(){
  console.log(this.name+'正在养兔子');
}
var person = {
  //成员属性
  name: '涛桑', 
  sex: '男',
  //成员方法
  play: function(){
	//this指代调用当前方法的对象
    console.log(this.name+'正在玩单杠');
  },
  yang: fn
};
//console.log(person);
//调用方法
//person.play();
//person.yang();

练习:创建一个圆的对象,包含属性有半径和圆周率,添加计算周长和计算面积的两个方法,最后调用者两个方法

var circle = {
  r: 5,
  pi: 3.14,
  len: function(){
    return 2 * this.pi * this.r;
  },
  area: function(){
    return this.pi * this.r * this.r;
  }
};
//console.log( circle.len() );
//console.log( circle.area() );

练习:创建一个计算器对象,包含计算任意两个数字相加,计算任意两个数字相减的方法;调用两个方法。

var calc = {
  jia: function(a,b){
    return a + b;
  },
  jian: function(a,b){
    return a - b;
  }
};
console.log( calc.jia(2,3) );
console.log( calc.jian(10,3) );

2.数据的存储
(1)原始类型存储
直接存储在栈内存中

(2)引用类型存储

将数据存储在堆内存中,同时会自动生成一个地址,然后把这个地址保存到栈内存(变量)中

引用类型数据占用内存空间比较大,如果要销毁,没有任何的地址所指向,就会自动销毁。直接赋值为null即可销毁
在这里插入图片描述

3.数组

就是一组数据的集合,每个数据称为元素

(1)数组字面量

[ 元素1, 元素2, … ]

//字面量创建数组
var emps = ['tao','dong','hua',10,true];
//console.log(emps);

练习:创建数组,包含有一组商品的名称

var laptop = ['小米Air','Apple Air','外星人'];
​    创建数组,包含有一组成绩

练习: 创建数组,包含有一组成绩

var score = [80,97,63,78];
//console.log(score);
(2)元素的访问

数组[下标]
下标从0开始的整数,如果下标不存在返回undefined

//下标:自动为每个元素添加的编号,从0开始
//console.log( laptop[4] );
laptop[2] = 'ThinkPad';
laptop[3] = '戴尔';
laptop[5] = '华为';
//console.log(laptop)

练习:创建数组,保存一组汽车的品牌名称,修改其中的元素,在末尾添加若干元素,打印数组。

(3)数组的长度
数组.length 获取数组元素的个数
数组[ 数组.length ] = 值; 可以在数组的末尾添加元素

//练习:创建数组,保存一组汽车的品牌名称,修改其中的元素,
//在末尾添加若干元素,打印数组。
var car = ['长城','五菱宏光','比亚迪','蔚来'];
car[1] = '特斯拉';
car[3] = '劳斯莱斯';
//使用当前数组长度作为下标
car[car.length] = '吉利';
car[car.length] = '丰田';
car[car.length] = '本田';

练习:创建一个空数组,使用数组的长度属性不断添加元素。

//练习:创建一个空数组,使用数组的长度属性不断添加元素。
var arr = [];
arr[arr.length] = 'a';
arr[arr.length] = 'b';
arr[arr.length] = 'c';
console.log(arr);
(4)内置构造函数

new Array(元素1,元素2…)

//内置构造函数
var arr = new Array('a','b','c');

new Array(3) 创建数组,初始化数组长度为3,可以添加更多个元素

//初始化3个元素
var course = new Array(3);
course[0] = 'mysql';
course[1] = 'js';
course[2] = 'nodejs';
course[3] = 'ajax';
//console.log(course);

练习:创建数组,包含有多个国家

//练习:创建数组,包含有多个国家
var country = new Array('日本','印度','瓦坎达');
//console.log(country);

​ 创建数组,初始化长度为5,添加篮球场上的5个位置。(大前锋 小前锋 中锋 控球后卫 得分后卫)

var ball = new Array(5);
ball[0] = '大前锋';
ball[1] = '小前锋';
ball[2] = '中锋';
ball[3] = '控球后卫';
ball[4] = '得分后卫';
console.log(ball);

(5)数组的分类

索引数组:以0及以上整数作为下标 >=0

关联数组:以字符串作为下标,需要单独的添加元素

//索引数组:0及以上的整数作为下标
//关联数组:字符串作为下标
var person = [];
person['name'] = 'tao';
person['sex'] = '男';
person.age = 48;
//console.log(person);
//练习:创建数组,包含有一组商品,每个商品包含的属性编号、标题、价格;
var laptop = [
  {lid: 1,title: '小米Air',price: 4199},
  {lid: 2,title: 'thinkpad',price: 3799},
  {lid: 3,title: '联想小新',price: 5399}
];
//console.log(laptop);
//
//console.log( laptop[1].title );
//console.log( laptop[2].price );
//练习:创建一个学生对象,包含属性有学号,姓名,性别;选修的课程(可以选多个)
var student = {
  id: 1,
  name: '涛哥',
  sex: '男',
  course: ['体育','养殖','机械']
};
//console.log(student);
console.log( student.course[0] );

(6)数组的遍历

for-infor(var k in 数组){ k 代表下标 数组[k] 下标对应的元素}
循环for(var i = 0;i < 数组.length; i++){ i 代表下标 数组[i] 下标对应的元素}
var arr = ['tao','dong','tom','king'];
//遍历数组
//for-in
/*
for(var k in arr){
  //k 代表下标
  //arr[k]  元素
  console.log(k, arr[k]);
}

练习:创建数组,包含有一组成绩,将所有成绩在60分以下加10分;打印数组

//练习:创建数组,包含有一组成绩,将所有成绩在60分以下加10分;打印数组
var score = [87,91,55,63,49];
//遍历数组,得到每一个成绩
for(var k in score){
  //console.log(k,score[k]);
  //如果成绩在60以下
  if(score[k] < 60){
    //原来基础之上加10分
	score[k] += 10;
  }
}
console.log(score);

练习:创建数组,包含所有学生的成绩,遍历数组,计算出总分和平均分。

//练习:创建数组,包含所有学生的成绩,遍历数组,计算出总分和平均分。
var score = [87,91,55,63,49];
for(var i = 0,sum = 0;i < score.length;i++){
  //console.log(i,score[i]);
  //求和
  sum += score[i];
}
console.log(sum,sum/score.length);
*/
//练习:创建数组,保存一组数字,遍历数组,获取最大值
var score = [87,91,55,63,49];
//声明变量用于保存最大值,初始化第一个元素作为最大值
for(var i = 0,max = score[0];i < score.length;i++){
  //score[i]  代码每个数字
  //用max和每个数字进行比较,如果小于任意一个数字,则把该数字放入到max
  if(max < score[i]){
    max = score[i];
  }
}
//循环结束后,max找到了最大值
console.log(max);

(7)API

API:应用程序编程接口,JS下指提供好的函数或者方法

toString() 将数组转为字符串

join( str ) 将数组转为字符串,可以设置字符串之间的分割符

var arr = ['a','b','c'];
//转为字符串
console.log( arr.toString() );
console.log( arr.join('/') );

//var num = 5;
//console.log( num.toString() );
//如何区分两个方法(API)是不是同一个
//查看调用这个方法的对象,是不是相同的数据类型

(2)练习

创建数组,遍历数组,翻转数组中的元素;

[‘a’,‘b’,‘c’,‘d’] -> [‘d’,‘c’,‘b’,‘a’]

//1.创建数组,遍历数组,翻转数组中的元素
var arr = ['a','b','c','d'];
//把倒着的元素放入到一个新数组
var arr2 = [];
//遍历数组
for(var i = 0;i < arr.length;i++){
  //0  4  3
  //1  4  2
  //2  4  1
  //3  4  0
  //倒着元素的下标 = 数组长度 - i - 1
  //console.log(arr.length - i - 1);
  //把倒着找到的元素放入到新数组arr2
  arr2[i] = arr[arr.length - i - 1];
}
console.log(arr2);

创建数组包含一组数字,遍历数组,将数字进行从小到大排序(冒泡排序)

[78,6,45,23] [6,23,45,78]

//2.创建数组包含一组数字,遍历数组,将数字进行从小到大排序(冒泡排序)
var arr = [23,9,78,6,45];
//外层循环:控制循环的轮数(比元素的个数少1)
for(var i = 0;i < arr.length-1;i++){
//0  5  4
//1  5  3
//2  5  2
//3  5  1
//内层循环:控制每一轮比较的次数
//循环条件 = 数组长度 - i - 1
for(var j = 0;j < arr.length - i - 1;j++){
 //j 代表当前的数字的下标
 //j+1  代表下一个数字的下标
 //如果当前的数字大于下一个数字,则位置交换
 if(arr[j] > arr[j+1]){
   var c = arr[j];
   arr[j] = arr[j+1];
   arr[j+1] = c;
 }
}
}
console.log(arr);
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值