一.复习
1.回答问题的时候应该从哪些方面回答
(1).先说明答案是什么
(2).分析这道题的代码
(3).找到这道题中的考点,并且针对于考点进行作答
(4).用什么其他的方法可以达到同样的效果,通过其他什么代码能让这段代码进行优化,有哪些东西是多余的,有哪些地方容易出现bug
2.js
(1).console.log(a); var a=20; var b=100;
打印出来的答案为undefined,不会报错是因为显式变量会在js代码运行前就进行声明,但是声明不等于赋值,所以a=20这段代码没有被提前赋值.
3.会被判断为false的值
“” 0 false undefined NaN ![]
4.取消锚点自带的跳转功能的方法
<a href="javascript:void(0)">xxx</a>
二.原始表达式
- 原始表达式不可再分割,是最小单位的表达式;简单的概念性东西;
- 原始表达式包含直接量、关键字(保留字)和变量名;
- 表达式组成语句,语句构成app==>应用程序
- 常见原始表达式举例:
//直接量
1;
1.02;
'hello world!';
//保留字
true;
false;
this;
//变量名
name;
hqyj;
age;
三.数组
1.js中的数组和其他的语言中数组的不同
(1).js中的数组是用来放数据的容器,和java不同,java中的数组中装的必须是同一数据类型的数据,而在js中则不同,甚至可以var arr=[100,200,300,"hello",true,undefined,null,[100,200,3000]]
可以在数组中同时存放数字,字符串,布尔值,undefined,null,数组
(2).取数据的方法:和java类似,使用方括号加下标
var re=arr[3]
如果是数组中嵌套数组(二维数组,多维数组)
var re1=arr[7][2]
js中的数组也有length属性,是数组中最后一个元素的下标加一
2.稀疏数组
var arr=[100,,,,,12]
(1).稀疏数组的问题是他的length属性不真实,比如这个数组他里面只存了2个数据,但是他的长度是6,其中1-4号元素并没有被定义数据
(2).如果此时在控制台输出arr[2],得到的值为undefined
(3).如果读取数组的元素超过了数字的长度,得到的值为**undefined,**和java不同,java会直接报错
四.对象的初始化表达式
- 可以简单理解为:对象直接量;
- 对象初始化表达式:由花括号({})和其内用逗号(英文状态 ,)分隔开的列表构成;
- 初始化的结果是创建一个新的对象; 对象的属性是逗号分隔开的表达式的值; 属性包括属性名和属性值,属性名和属性值之间用冒号隔开;
- “对象初始化表达式”中的“元素”也可以是“对象初始化表达式”,可以任意层级嵌套;
- 常见对象初始化表达式举例:
{name:'yourname', age:22};
- 读取对象的值可以使用两种方法:点阵法. 或者[ ]法
其中点阵法为新一点的技术,功能有一定的局限性,但基本够用,而且方便,点语法后面跟着的是字符串
eg:
var obj={name:"karen",age:18};
obj.name="jack" ; //其中name本来是"name",但是因为点语法可以不用打引号
obj.say="我是新成员" ; //其中obj是没有say这个属性的,但是通过这个代码,会在obj中新建一个say属性,他的值为string类型的"我是新成员"
console.log(obj) ; //直接在控制台打印出obj这个对象
var re=obj.name ; //定义一个re来接收obj中name里的值
console.log(re,obj.age) ; //打印结果
var mynameK="name"; //定义mynameK为string类型的"name"
var mynameV="karen"; //同理
var obj={}; //定义一个对象,属性和值都没有定义
obj.name="karen"; //让obj中新建一个属性name,他的值为string类型的"karen"
obj.mynameK=mynameV; //让obj中新建一个叫做mynameK的属性他的值为变量mynameV("karen")
obj["mynameK"]=mynameV; // 等同于obj.mynameK(等同于上一句代码)
obj[mynameK]=mynameV; //让obj中新建一个变量mynameK(name)的属性,值为变量mynameV("karen")
console.log(obj) // 输出
总结:
在读写对象的数据的时候,点函数后面跟的其实就是方括号中的单词去掉引号,点函数不能让程序中的变量中的值变成对象中的属性名,只能通过.属性名来达到这个效果,容易搞混的是方括号中的引号,当不打引号则为变量,打上引号则为字符串,如果这个字符串不在已有的属性中则新建一个属性,
记忆
先以点函数为基础,点函数不能在.后加上变量,必须是一个确切的属性,然后方括号加双引号等同于点函数,如果不加双引号则为变量
var name="name1"
var obj={name1:name}; //对象的直接量==>{name1:"name1"}
obj["name1"]=obj[name] //obj["name1"] = "name1"
console.log(obj)//"name1"
不理解:
在第三行代码中obj["name1"]=obj[name]
根据上面的结论,obj[name]则为obj[“name1”],左右两边都相等,怎么会出现obj["name1"] = "name1"
数据的嵌套
可以通过一个数组把很多个对象填充进去,达到嵌套的效果,读取的时候按照对象就使用点函数或者方括号,数组就使用下标进行读取数据
五.读取数据
读取数据可以通过在企业的js文件中,让全部的代码等于一个变量,然后在打印出这个变量,这样可以在控制台中查看数据,很方便,通过点函数和读下标来实现对数据的读取
六.函数的定义表达式
函数:function
声明:
function fn () {
console.log(6666)
console.log(777)
}
只需要定义,后续想调用的时候直接使用fn()进行运行大括号里面的代码
var fn1=function fm() {
}
fn1()
这种方法也是声明函数的一种,后续使用只需要使用变量的名字加括号就可以了
函数运行的时候必然会返回结果,函数中返回结果为return后的值,如果不写return或者return后没有跟值or表达式,则返回值为undefined
当函数运行到return时,函数立即停止运行,返回值
七.对象的创建表达式
var a=new Array();
var a= Array[100,200];
这都是创建一个对象的表达式
var a=undefined//NaN//null//true;
var re=-a;
console.log(re); //NaN//NaN//-0//-1
八.运算符
1.按位非~
使用方法:
var num = 10.18
var re = ~~num
console.log(re)
达到将10.18的小数去掉,得到的值为10
2.按位与&和按位或|
不咋使用
3.按位异或^
在不添加第三个变量的情况下将两个变量的数据进行交换
var a=10 //10^20 (10^20)^10===>20
var b=20 //(10^20) ^ 20 ===>10
a=a^b
b=a^b
a=a^b
var c=a^b//
000000000001 //1
000000000010 //2
000000000011 //3
console.log(c)
console.log(a)//20
console.log(b)//10
九.逻辑表达式(重点)
1.! (非)
!后面可以跟任何数据,并且结果必为布尔值
- 如果操作数是一个非空(null)对象,返回 false;
- 如果操作数是一个空字符串,返回 true;
- 如果操作数是一个非空字符串,返回 false;
- 如果操作数是数值 0,返回 true;
- 如果操作数是任意非 0 数值(包括 Infinity),返回 false;
- 如果操作数是 null,返回 true;
- 如果操作数是 NaN,返回 true;
- 如果操作数是 undefined,返回 true。
2.逻辑与&&
和java中的&&有区别
1.左右两边只要是js的表达就是正确的语法
2.表达式A转化为布尔值,
- 结果为真 整个表达的结果就是表达式B
- 结果为假 整个表达式的结果是表达式A 代码不会运行B表达式
var re=(20*50)&&(a=30); //20*50为非0所以为ture,所以结果为表达式B re=a=30; 所以re=30
var a=20;
var c=a>50&&(b=30)
console.log(a) //20
console.log(c) //20
console.log(b) //报错,程序没有进行到b=30这一步,恰好这一步为隐式声明,所以不进行声明
3.||逻辑或
A||B
1.左右两边只要是js的表达就是正确的语法
2.表达式A转化为布尔值,结果
为真 整个表达的结果就是表达式A 代码不会运行B表达式
为假 整个表达式的结果是表达式B
var a=0
var c=a||(b=30)
console.log(a,b,c) // 0 30 30
十.三目运算符
如java类似
eg:
var re=a>10?console.log(666):console.log(111);
console.log(re);
赋值运算符:
类似java,不做笔记
, 运算符
逗号操作符多用于声明多个变量;但除此之外,逗号操作符还可以用于赋值。在用于赋值时,逗号操作符总会返回表达式中的最后一项,如下面的例子所示:
var num = (5, 1, 4, 8, 0); // num 的值为 0
十一.eval函数
eval是一个新的函数,用于将字符串里面的数据进行运算
eg:
var arr=[100,2302,3045,50,60]
var str=arr.join("+")
console.log(str) //"100+2302+3045+50+60"这一个字符串
var re=eval(str) //将这个字符串里面的数据进行运算
console.log(re/arr.length) //求出平均值
这段代码是最快速求出该数组的平均值的
十二.语句
什么是语句,语句就是由js来读取的代码,由分好(;)隔开
语句分为:
1.空语句
eg:
console.log(111);
;
;
;
;
console.log(666);
其中四行代码只有一个分号组成语句,这样的代码没有什么意义,运行起来很快就走完
2.单语句
eg
var a=20;
a=90;
这每一个分号就是一个语句,没有嵌套,一段话,一个语句所以叫单语句
3.复合语句
eg
if(20){
console.log(66);
console.log(111);
};
这个if语句就是一个复合语句,其中包含了两个单语句
if语句和for语句
用法基本和java一样
if(window.XMLHttpRequest){}
判断当前浏览器是否为现代浏览器
for语句用于什么
产生一系列已知数量或者范围的 有规律变化的 数据
做遍历获取数据