大一下 Javascript学习笔记(上)

79 阅读6分钟

寒假是在家里预习了一小部分,但是来了学校老师很多都略过了,所以我还是总结一下吧(因为期中考试要到了)

其实主要是想作为笔记,在我期末或者什么考试的时候可以返过来看看追忆一下

那就从我最初印象开始吧
比较运算符

有‘==’和‘===’,两者的区别在于:==只要求两边的值相等即可,而===不仅要求值相等,还要求两边的数据类型相等,比如:

 alert(18=='18'); //true,只要求值相等即可
 alert('18'===18);//false,还要求数据类型相等
逻辑运算符&&||

其中&&是指:如果第一个值为真,则返回第二个值,若第一个值为假,则返回第一个值,例如:

alert(1&&2)//返回2
alert(0&&1)//返回0

||是指:如果第一个为真,则返回第一个值,若第一个为假,则返回第二个值

短路特性:

只要第一个是0,空(null),否定意义的(undetify),则直接可以得出结果,比如:

var num=3;
alert(0&&num++);//0
alert(num);//3,由于短路特性,num++不执行

var num=0;
alert(1||num++); //1
alert(num); //0

练习:alert(1&&1+2&&1*2); 分析:先进行乘法和加法运算变为:1&&3&&2,然后顺序执行,结果为:2

若有var a=1,b=1,c=1; 则表达式2&&b%a||!c的值是 分析:先计算b%a为0;变为:2&&0||!c,然后2&&0为0,0||!c,第一个为假返回第二个,c为1是true,则!c为false,所以答案为:false

一些注意的地方

在JS中,如果如果实参个数小于形参,那么会是NaN,若多于,那么取只有的实参

如果有多个函数同名,则只取最后一个函数

在函数里,如果出现了return,则后面的语句是不会被执行的

arguments的使用

arguments是一个伪数组,它存放了函数传入的参数,可以用来求参数的长度,或者第i个参数的值等

注意,arguments是指函数参数的,不是参数里面的,如果参数是个数组就不能得到数组里的值
//利用函数求任意个数的最大值
var a;
function max(){
	for(var i=1;i<=arguments.length;i++){
		if(arguments[i]>arguments[i-1])
	a=arguments[i];
		else
	a=arguments[i-1];
	}
	return a;}
alert(max(1,2,3,4,5,6,7));

认为比较重要的:JS的预解析

var a = 1; //预处理中的全局变量a的值改为1
function fn1(){
    alert(a);
    var a = 2;
} //函数声明,什么也不做
fn1(); //遇到函数调用,开始进行预解析和逐行解读代码。在函数内,先预解析出一个局部的 a 是未定义(局部的a与全局的a一点关系都没有);然后读代码,alert(a)弹出的是undefined;然后继续执行,遇到表达式,将局部的变量a的值改为2。这时fn1的函数执行已经完成了。
alert(a); //弹出全局变量a1
var a = 1; //预处理中的全局变量a的值改为1
function fn1(){
    alert(a);
    a = 2;
} //函数声明,什么也不做
fn1(); //遇到函数调用,开始进行预解析和逐行解读代码。在函数内,没有任何函数和变量声明,因此预解析里面没东西;然后读代码,alert(a),在局部没有找到预解析的a,于是从子级作用域跳到父级作用域去找,找到了全局的a,所以弹出的是全局变量a的值1;然后继续执行,遇到表达式,将全局变量a的值改为2。这时fn1的函数执行已经完成了。
alert(a); //弹出全局变量a2
首先了解一下函数的定义方式

原文链接:blog.csdn.net/sxk0817/art…

js引擎会将代码中声明var ,function提升到最前面,不提升赋值操作,代码执行 按照从上到下的顺序执行

举个例子:变量提升:console.log(num); var num=10;相当于执行了: var num; console.log(num); num=10;

函数提升:采用 [赋值] 方式定义函数, 函数调用必须写在函数定义下面

    var fun;  //声明未给值
    fun();  //调用未定义函数--报错
    fun = function() {  //最后才定义,这个不属于函数声明了
            console.log(22);
    }

  //2,
    function fn() { //是函数声明
            console.log(22);
    }
    fn();
var num = 10;
       fun();
       function fun() {
               console.log(num);
               var num = 20;
       }
       
       //相当于执行了以下操作()
       var num;  //提升num = 10那个 num
       function fun() {
               var num;  //提升的是num = 20那个 num
               console.log(num);
               num = 20;
       }
       num = 10;
       fun();

//(典中典)以下代码
function f1() {
       //相当于 var = 9; b = 9; c = 9; b 和 c 直接赋值 没有var声明, 当 全局变量 看
       //集体声明 var a = 9, b = 9, c = 9
       var a = b = c = 9;
       console.log(a);
       console.log(b);
       console.log(c);
}
f1();
console.log(c);  //全局变量c = 9
console.log(b);  //全局变量b = 9
console.log(a);  //局部变量a, 函数外不能使用

原文链接:blog.csdn.net/weixin_4366…

老师给的例子:
var t;
var aa=function(){t=5;}()
alert(t)//5

因为是匿名函数,所以是直接调用(不能单独使用)

数组

数组赋值!

数组赋值为指针赋值,看例子:
a = [];
b = [];
c = [1,2];
a = c;
b = c;
a[0]=5;
//此时a,b,c都指向同一个数组的[地址空间],通过a,b,c访问下标为0的值,都为5

老师给的例题:

var a[1,2,3,4];
var c=a;
c[3]=5;
alert(a);

结果是:[1,2,3,5]

2,

var a=[];
var c=a;
c[3]=5;
alert(a);

结果是:[,,,5]

3,

var a=[1,2,3,4];
var c=a[3];
c=5;
alert(a);

结果是:[1,2,3,4],这里就没有相当于指针赋值了

数组遍###### (这里学的不太好)

for in遍历(常见用在对象中,遍历对应的key值和value值)

二维数组的遍历用两个for循环

JS中的6中数据类型

Undefined类型:

Undefined类型只有一个值即undefined。

Null类型:

Null类型是第二个只有一个值的数据类型即null。null值表示一个空指针对象,因此typeof操作符检测null值时返回“object”。

Boolean类型:Boolean类型有两个值:true和false。

true不一定等于1,false不一定等于0。需要注意的是true和false是区分大小写的,也就是说True和False(以及其他的混合大小写形式)都不是Boolean值,只是标识符。

Number类型:

如果某次计算的结果超出了javascript的数值范围则这个数值将被自动转换成特殊的Infinity值(负数则转换为-Infinity(负无穷),整数则转换为Infinity(正无穷))。正或负的Infinity值无法参与下一次的计算。使用isFinite()函数可以判断数值是否在最小值与最大值之间。

注意,Number类型里包括NaN,它表示Not A Number(不是数字) 任何值和NaN比较都不相等(它自己都不等于)
String,Object
下面是老师给出的例题:

1,alert(NaN==NaN)//false

2,alert(undefined==null)简单理解为,既然两者的行为属性有相似的地方,JS就把他们俩值相等,但是===不相等

3,alert(NaN==undefined)//false NaN==null //false 4,typeof(undefined)//undefined

5,typeof(NaN)//number

6,typeof(null)//Object

好啦!以上就是期中考试前的复习内容,等到了期末考试会再写下一篇,作为复习吧