一、检测属性是否存在

对象.属性名===undefined false->存在 ture->不存在

对象.hasOwnProperty('属性名') ture->存在 false->不存在

'属性名' in 对象 ture->存在 false->不存在

检测属性是否存在 练习一个商品对象,包含的属性有编号、标题、价格;如果产地属性不存在则添加属性,如果价格属性存在,执行打8折;最后打印对象
var person={
    name:'小李',
    sex:'女',
}
//检测属性是否存在
//console.log(person.name===undefined)
//console.log(person.hasOwnProperty('name'))
console.log('name' in person)
var goods={
    id:'23',
    title:'保温杯',
    price:'168'
}
if (goods.madeIn===undefined){
    goods.madeIn='四川'
}
if(goods.hasOwnProperty('price')){
    //goods.price*=0.8
    good.price=goods.price*8/10
}
console.log(goods)

二、对象下的方法

本质上就是一个函数

var p={

play:function(){

this   指向调用方法的对象

}

}

添加方法 练习:创建一个圆对象,包含的属性有半径和圆周率,添加方法计算面积返回结果,添加方法计算周长返回结果;最后调用两个方法
function fn(){
    console.log(this.name+'正在跑步')
}
var p={
    name:'小李',
    //添加方法
    run:fn,
    play:function(){
        //this 这个,表示指向的某一个对象
        //this 指向的是调用当前方法的对象
        console.log(this)
        console.log(this.name+'正在打游戏')
    }
}
console.log(p)     // name: '小李', run: [Function: fn], play: [Function: play] }
//调用对象的方法
p.run()         //小李正在跑步
p.play()      
var circle={
    r:3,
    pi:3.14,
    area:function(){
        return this.r*this.r*this.pi
    },
    length:function(){
        return this.r*2*this.pi
    }
}
console.log(circle.area())
console.log(circle.length())

三、数据的存储

原始类型:将数据直接存储到栈内存

引用类型(函数、对象、数组):将数据存储到堆内存中,会自动生成一个地址,如果把对象赋给变量,是把对象的地址保存到了栈内存变量;

null:空地址,找不到堆内存中的数据

引用类型的数据占的空间没有限制,如果需要下偶会,这个数据不被任何的地址指向。只需要都赋值为null即可

原始类型存储和引用类型储存 p1p2是地址进行对比,尽管内容一样,结果任然false

//原始类型存储
var a=1
//把a的值拷贝一份,再赋值给b;a和b两者是独立的
var b=a
//改变a的值,不影响到b
a=2
console.log(b)

//引用类型储存(函数、对象、数组)
var tao=1{
    color;'绿色',
    size;'xxxl'
}
var xin=tao
//修改xin的属性
xin.color='红色'
//修改tao的属性
tao.size='xxxxl'

console.log(tao)
console.log(xin)
//两个对象比较,比较的是地址
console.log(tao===xin)   //true
//如果要销毁引用类型的数据
tao=null
xin=null

var p1={a:1}
var p2={a:1}
console.log(p1===p2)   //false
值传递
var n=2
function fn(a){
    a=a+3
}
//变量n中保存的是一个原始类型的值,把n作为参数传递,拷贝一份n的值,和原来的n没有任何关系
fn(n)    //fn(n)
console.log(n)   //2
址传递
var p={
    name:'tao'
}
function foo(obj){
    obj.name='xin'
}
//p是引用类型,传递的是对象的地址,拷贝一份对象的地址
foo(p)   //foo(对象地址)
console.log(p.name)   //xin

四、数组

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

1.创建数组——字面量

[元素1,元素2,...]

//创建数组,保存一组数据
//字面量
//var names=['tao','xin',2,true,null,{},function(){}]
//console.log(names)

练习:创建数组,包含一组工资

var salary=[15000,8213,9845,12321]

练习:包含一组手机品牌名称
var phone=['华为','三星','vivo','小米']

2.访问元素

数组[下标]

下标:也称为索引,是自动为每个元素添加的编号,是一个>=0的整数

如果下标不存在返回undefined

下标(索引):数组自动为每个元素添加的编号,从0开始
//访问元素
//练习:创建一个数组,包含若干个城市,修改其中的元素,在末尾添加多个元素

console.log( phone[0],phone[4])
phone[2]='苹果'
phone[4]='oppo'
phone[5]='诺基亚'
console.log(phone)

var city=['成都','宜宾','重庆']
city[1]='绵阳'
city[3]='天津'
city[4]='甘孜'

console.log(city)
console.log(typeof city)

3.长度属性

数组.length  获取数组元素的个数

在数组的末尾添加元素    数组[数组.length]=值

//长度
console.log(city.length)
city[city.length]='太原'
console.log(city)
//练习:创建一个空数组,使用数组长度往末尾 添加若干个用户名
var names=[]
names[names.length]='小红'
names[names.length]='小兰'
names[names.length]='美琪'
names[names.length]='美雪'
console.log(names)

4.创建数组——内置构造函数

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

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

//内置构造函数 //练习:创建数组,包含若干个国家

var arr=new Array('a','b','c')
//初始化长度值
var course=new Array(3)
course[0]='mysql'
course[1]='js'
course[2]='nodejs'
course[3]='html'
console.log(course)

var contry=new Array('中国','意大利','新加坡')
console.log(contry)
//练习:创建数组,初始化长度为4,添加四个商品名称
var goods=new Array(4)
goods[0]='笔'
goods[1]='水杯'
goods[2]='筷子'
goods[3]='汤勺'
console.log(goods)

5.数组分类

索引数组:以>=0整数作为下标
关联数组:以字符串作为下标,需要单独添加元素

数组分类 //练习:创建数组包含一组员工,每个员工是一个元素,包含的属性有姓名,性别,工资

var p=[1]
//以>=0整数作为下标,叫做索引数组
//以字符串作为下标,叫做关联数组
p['name']='nan'
p['sex']='女'
p.salary=30000
console.log(p)

var emp=[
    {name:'小红',sex:'女',salary:5000},
    {name:'小明',sex:'男',salary:4500},
    {name:'小兰',sex:'女',salary:12000}
]
console.log(emp)
//获取到小明 4500
console.log(emp[1].name,emp[1].salary)

6.数组和对象有什么区别

两者都是可以存储一组数据,对象的数据放到属性中,数组的数据放到了元素中

对象的数据是一组无序排列的数据,数组的数据是一组有序排列的

7.遍历数组

依次访问数组中的每个元素

for(var k in 数组){

k  代表下标

数组[k]   下标对应的元素

}

for(var i=0;i<数组.length;i++){

i  代表下标

数组[i]   下标对应的元素

}

var arr=[5000,8500,1200,9000]
//遍历
for(var k in arr){
    //k 代表下标
    //arr[k]  下标对应的值
    console.log(k,arr[k])
}
//for循环(0~3循环)
for(var i=0;i<arr.length;i++){
    //i代表下标
    console.log(arr[i])
}
练习:创建数组,包含一组成绩,遍历数组,计算出总成绩和平均成绩
var score=[95,85,75]
var avg
for(var i=0,sum=0;i<score.length;i++){
    sum+=score[i]
}
avg=sum/score.length
console.log(sum,avg)
练习:创建数组,包含一组数字,遍历数组,获取最大值

var num=[85,65,56,98,83]
var a=0
for(var i=0;i<num.length;i++){
    if(num[i]>=a){
    a=num[i]
    }
}
console.log(a)

JS day_07(5.16)创建和访问数组 、 数组的常用方法、二维数组相关推荐

  1. c语言二维数组行优先如何访问快,C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why?...

    C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why? 简单粗暴的答案:存在Cache机制! 稍微啰嗦一点:CPU访问内存(读/写,遍历数组的话主要是读) ...

  2. 如何访问自定义键值的二维数组

    2019独角兽企业重金招聘Python工程师标准>>> <?php//访问自定义键值的二维数组$products = array(array('name'=>'apple ...

  3. js一维数组,api,二维数组

    1.定义数组 空数组 1.数组字面量:[ ] var 变量名 = [ ]://定义一个空的数组把数组保存到变量中 2.新的数组对象 var 变量名 = new Array()://定义一个新的数组对象 ...

  4. 【C语言数组】一、二维数组冒泡排序

    目录 1. 一维数组的创建和初始化 1.1 一维数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 ...

  5. 【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )

    文章目录 一.抽象 二维数组 业务函数 1.二维数组 打印函数 2.二维数组 排序函数 二.完整代码示例 一.抽象 二维数组 业务函数 1.二维数组 打印函数 注意 , 二维数组 作为 函数参数 输入 ...

  6. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现

    文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...

  7. Java 数组(三)二维数组

    如果一维数组的各个元素仍然是一个数组,那么它就是一个二维数组.二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表所在的列. 一.二维数组的创建 1.先声明, ...

  8. Java二维数组详解:二维数组的声明和初始化,以及获取二维数组的值

    为了方便组织各种信息,计算机常将信息以表的形式进行组织,然后再以行和列的形式呈现出来.二维数组的结构决定了其能非常方便地表示计算机中的表,以第一个下标表示元素所在的行,第二个下标表示元素所在的列.下面 ...

  9. 数组--如何通过【二维数组+稀疏数组】实现五子棋盘,并且保存记忆功能?

    一.应用场景 通过Java + 二维数组 + 稀疏数组实现一个五子棋盘功能,并且具有保存记忆功能. 二.实现原理 2.1 二维数组 大家都知道一维数组,不过一维数组的属于线性结构,而二维数组则属于非线 ...

最新文章

  1. elk日志分析系统_部署ELK企业内部日志分析系统
  2. rails2.3.5 添加jquery ui 找不到images
  3. 高可用集群中的选举机制
  4. 一篇文章搞定GVIM(根据工作经验持续更新)
  5. CMDB经验分享之 – 剖析CMDB的设计过程
  6. zabbix mysql安装配置_ZABBIX4.4 安装及配置
  7. java抠图边框颜色处理_java 实现抠图(项目应用场景:抠图章)
  8. Caffe傻瓜系列(11):caffe中的lr_policy选择
  9. Fragment学习(二): 管理Fragment和Fragment通讯
  10. 在python中查询excel内容
  11. 拍视频到底用手机还是相机好?
  12. norms matlab
  13. 抓包PC微信小程序失败解决方法
  14. Multisim中元器件的翻转方法以及快捷键,最详细,最清晰!!!
  15. 深度学习在知识图谱的应用
  16. Java webp图片处理
  17. .Dragon4444勒索病毒处理成功方法
  18. Java技术——Interface与abstract类的区别
  19. Linux从入门到放弃 docker
  20. 不讲武德!小伙陪大爷下棋靠手机开挂艰难获胜:我选的是天人合一难度

热门文章

  1. Django QuerySet优化
  2. aws 噼里啪啦做了一天测试 花了4$
  3. 16、Java 基础-反射
  4. 微信拼手气红包C语言,微信拼手气红包背后的算法逻辑
  5. linux搭建filebrowser教程,使用File Browser 搭建远程文件管理器
  6. Ubuntu18.04设置连接网络,使虚拟机下的Ubuntu18.04可以上网
  7. 会议交流 | 京东硅谷首席科学家领衔,图机器学习峰会火热开启!
  8. 如何免费创建移动端论坛APP?
  9. 乌拉姆距离(Ulam)
  10. 人工智能教程 - 数学基础课程1.2 - 数学分析(二)6-7. 速度,加速度和开普勒第二定律