一、例题
1.该题的分析
console.log(a);
var a = 20;
①首先输入是undefined //1.写出答案
②为什么输入是undefined? //2.分析
第一:这里就要提到关于Js这个语言与其他语言的不同之处了,Js语言是按顺序来一行一行的编译语句,再执行语句,不像C,Java语言在运行代码前会先进行编译检查语法错误。
所以,这里来说也就是当程序执行到console.log(a);
时,实际上这里的a
是没有值的,所以返回值是undefined
。
第二:说到这里就会有疑问了,既然a
都没有在程序中得到声明,那为什么实际执行时它却仍然有返回值呢?这里又涉及到另一个知识点的说明——如果给一个变量变量存数据,没有变量,系统会在全局作用域下隐式声明一个变量(全局作用域暂且不说毕竟我还没到那个地步)。说到这里,关于我们为什么没有声明的a
有返回值就知道为何了。
第三:当然这里说到一点,关于隐式声明,程序会替你去声明一个a
变量(针对该例题而言),但是实际程序你是看不到的。
第四:一个小提示,声明不代表赋值,所以就该题而言,尽管按照程序它会给你隐式声明一个a
变量,但是并不代表程序会对a
进行 var a = 20;
这一语句的操作,所以在第一点里提到的a
为什么没有值来源于此。//3.技术点分析以上
2.关于这里对知识点的考察
①JavaScript加载代码与其他语言的区别
②变量的声明与赋值,以及隐式声明的特点
③声明提前
3.如何改进与优化
①把第二行代码提到最前
var a = 20;
console.log(a);
②或者在console.log(a)
语句之前对a
进行赋值(利用隐式声明的特性)
a = 20;
console.log(a);
4.总结
①本身先调用再赋值就是语法上的错误,但是在这里Js将它改进成一种技术称为声明提前
②声明不代表赋值
③隐式声明的特点
④写解题思路很棒(一个小小的问题能够写出这么多,会使人记得更牢固,同时也是锻炼逻辑思维,以及在编写的过程中,会很明显的知道技术点在哪,在面对面试官的考察就能更准确更快的回答_ (:з」∠)_
二、笔记
1.原始表达式
原始表达式:就是编程程序的最小单位,表达式就是代码的最小单位。
简而言之就是英文里的每个字母就相当于是程序的原始表达式。
2.数组初始化表达式
1.数组:是存放数据的容器(只要是七大数据类型都可以)
数组的初始化:var arr=[100,200,300,"hello",true,undefined,null,[100,200,3000]]
,而且数组是数据,所以你可以在数组中放数组作为数组的元素
数组的长度属性是length。举例!!(当想要利用for循环遍历数组元素时length会让你不用知道数组的长度而给for循环写上限制比如下列代码)
for (var i=0;i<sinadata.statuses.length;i++){
}
2.稀疏数组
比较特殊的一个数组,如:[100,,,,,,8]
注意点:
①稀疏数组的元素个数是存在值的比如100和8才算所以这里的元素个数是2,但是length等于7是因为100是第0号元素,8是第7号元素,length的值是最后一个元素的下标减一,所以这里length=7,但是元素只有两个,在console上100和8之间会打印empty,但是并不代表100和8之间有元素存在,只是为了方便查看浏览器才这么写。
②因为稀疏数组的出现,所以证明了数组属性length的值并不一定能够准确反应数组元素个数。
③这里要将数组元素和变量稍作区分:当你调用一个你从未声明的变量系统会报错,但是如果你取数组中的超出下标的元素(即不存在的元素),程序不会报错,相反它会给你一个返回值undefined
3.对象初始化表达式
1.对象的初始化:var a = {xxx,32532,444,{}}
2.同样的,对象数组也是存放数据的容器,而对象数组本身也是数据,所以可以在对象数组里面放对象数组,即数据嵌套。
3.对象的存取数据:一般使用点语法(语法糖),或者使用[ ]来存取数据,例:
var re = sinadata.statuses[1].annotations;
//这里是将sinadata下的对象statuses数组的第一号元素的对象annotations的成员的值赋值给re变量保存
console.log(re);
//这里是打印存储在re变量中的值
或者
var obj={name:"karen"};//声明一个对象obj,并设置obj对象属性name的值为Karen
var re=obj["name"];//将obj属性name的值Karen赋给re变量
console.log(re);//打印存储在re变量中的值
4.新成员的声明和赋值
var obj={name:"karen",age:18}
obj.name="jack"
obj.say="我是新成员"//新成员的声明和赋值(声明say对象成员,并给它赋值为jack)
console.log(obj)
5.例题
var name="name1"
var obj={name1:name};//对象的直接量==>{name1:"name1"}
obj["name1"]=obj[name]// obj["name1"] = "name1"
console.log(obj.name1)//"name1"
①这道题的答案是name1
②分析过程:
第一句:给声明的name
变量赋值为"name1"
第二句:将声明的对象obj
的属性name1
的值设置为name
,但是给属性设置的值需要打上双引号,所以这里添加的name1
的属性值实际上是变量name
的值,一个字符串"name1"
,所以这里obj
的属性name1
的值为"name1"
第三句:将obj的属性name1的值赋值给obj的属性name1(实际相当于没变化,目的是混淆视听)
第四句:打印的结果是name1
③总结:这里主要是要理清谁是变量,谁是对象属性,谁是对象属性的值,理清之后就很简单了
完毕!ヾ(●´∇`●)ノ哇~
4.函数定义表达式
1.函数的声明
//函数声明表达式
function fn () {
console.log(6666)
console.log(777)
}
fn()//函数的调用表达式==>调用的时候,函数的大括号里面的代码就会运行一次
var fn1=function fm() {
}
//函数的定义表达:函数可以要名字也可以不要==>这里访问函数只有通过变量名
fn1()
2.函数的简单特征
①函数运行时产生的结果:函数运行时运行到return
函数就停止运行
②return
后面可以不写数据 也可以写数据
③不写数据和不写return
函数都会产生返回值undefined
5.逻辑表达式
1.!之后跟任何数据都会将该数据变成布尔类型,其值为布尔值
2.(重点)记住这些布尔值为false的特殊数据
①+0,-0,0
②null
③NaN
④defined
⑤![ ]
⑥""
2.逻辑与 运算
A&&B
1.左右两边只要是JavaScript的表达式就是正确的语法
2.表达式A转化为布尔值,结果
①为真 ,整个表达的结果就是表达式B
②为假 ,整个表达式的结果是表达式A ,代码不会运行B表达式
var c=(a=30)&&(b=40)
//a=30//true
//b=40//
//c=b=40==>b=40 c=b
console.log(a)//30
console.log(b)//40
console.log(c)//40
//这里要注意的是如果 a=0即A为假,即a=c=0,而b=40没有执行,所以执行到console.log(b)时会报错,因为未定义b
6.三目运算符
1.格式:a?b:c
2.解读:先对a表达式进行布尔判断,若结果为true,选择b表达式作为运算的结果,反之则选c。
7.逗号操作符
1.可以用一行同时声明多个变量,如
var a,b=10;
2.可做运算符,如
var i = (1,8,3,6,4);
console.log(i); // i = 4
其操作运算总是取括号内的最后一个元素作为我这里声明的变量的值
8.eval函数
1.是个好用的函数,其作用就是将字符串作为语句来使用,如
var str="console.log(6666)"
console.log(str)
//其最终结果是打印6666,是因为把str存储的字符串当做语句来处理,所以实际执行的是console.log(6666);
9.if语句
1.if和else的大括号可以省略,它认为大括号里面只有一个执行语句
2.因为第一条所以才利用其特性创造出了if-else if-else语句
10.for语句
1.for的运行结构
for(A;B;C){
执行体
}
//1.ABC都是语句
//2.运行一次A
//3.把B表达式转为布尔值
//4.如果布尔值为true==>运行执行体==>运行C 回到上面3
//5.如果布尔值为false==>for执行结尾大括号
2.作用:for干嘛用? 产生一系列已知数量或者范围的,有规律变化的,数据
3.举例:冒泡排序,遍历数组
总结
for和if写的很少,主要是以前学过,对于自身也就不再一一总结了。
最多的感受还是,对于现在的我,对它的学习不是大学期末考试过了就可以,而是要全部掌握,像吃炖排骨一样,要做到食髓知味的地步才可以,语言即是工具,掌握语言即是掌握了一种工具,无论是为认识世界增加了新角度,还是为人自己的生活而服务,又或者实现自己的价值,追逐梦想等等等等。总之万事万物尽力做到极致才会有回味的感觉,爬上山顶回头望向云海的感觉一定会比爬山时的心境更加豁达吧。那种升华的感觉,是人间美味。