JavaScript学习笔记记录

1、首先说编译性语言和解释性语言:

       程序猿编写的代码是给人看的,并不是给机器看的,所以在机器执行代码之前需要进行一次翻译,将代码翻译为机器能够识别的机器码。

       编译性语言:在编译时为通篇编译,所有的代码编译完成后,才会执行。

       解释性语言:在执行时才会进行翻译,翻译一行,执行一行,不会通篇翻译。

 根据两种语言的特点:

    编译性: C、C++

              优点:快;   不足:移植性不好(不能跨平台)

   解释性:  JavaScript、php

              优点:跨平台      不足:稍微慢点

2、JS代码执行是单线程同步执行(特点)

      问题:既然js为单线程同步执行,为何能在页面上看到几个模块在同时展示?

       js会将这些将要执行的队列随机的分割为无数的小序列,然后按照这个顺依次执行,由于执行时间非常短,已经超过肉眼所能分辨的情况。

3、主流浏览器:拥有独立的浏览器内核的浏览器称为主流浏览器。

    IE                trident 

    Chrome      webkit/blink
    firefox         Gecko
    Opera          presto

     Safari          webkit

4、JS申明变量

在ES5中使用var关键字来申明变量    例如: var a = 123;  此过程可以拆解为两步:首先申明一个a变量 var a;,然后再给a赋值  a = 123;

5、JS中值类型:

原始值、引用值

原始值类型分为五类:number、string、boolean、null、undefined   引用值: function、object、array、date、RegExp....

并且在js中数字类型都是浮点型;在申明一个变量未赋值,即为undefined;null在js中表示占位值; 

6、原始值与引用值如何存储

原始值会存在栈区,栈区存值先进的在底部。

var a = 10; var b =a;首先申明一个变量a;系统分给a一个空的栈区,将10赋值给a,系统立即会将10存入栈区。然后申明一个变量b;系统随即给b一个空的栈区,然后将a 赋值给b,系统会将a的值赋值一份出来放到存b的栈区。所以 a = 20;时系统将新分配一个房间(栈区)给a,并赋值为20,不会影响b的值,并且不会删除之前已分配的栈区。所以原值时改变时,不会相互影响。

 栈区(stack) 栈区
1010101008文本(空)
b101007文本(空)
a201006文本(空)

      引用值存储时:(散列结构)

var arr = [1,2],首先申请一个房间(栈区)arr,赋值时,引用值会存在堆区,与此同时会将堆内存中地址放入栈内存中。在var arr1; arr = arr1;系统将arr栈区的值复制一份给arr1,所以在改变arr的值时,同时会改变arr1的值。例如arr.push(3)

假如给arr重新赋值 arr = [1,3],那么会在堆区中重新存放一个[1,3],并将堆内存的地址重新存入arr对应的栈区内存中。

 

 

 栈区(stack) 堆区(heap)

arr(1010)

heap10011001[1,2  ,3]
arr1heap10011002[1,3]
1008(arr)heap10021003 

注意:实际的栈区内存,赋值后不会被删除的,删除的只能是变量名称和实际存放值得一个联系,并不会真正清除栈内存。可以一直存,存满后,可以进行覆盖。

7、JS错误分两种:语法解析错误和逻辑错误

js为解释语言,但是在执行前,会整体扫描一遍,看下代码有么有语法错误,一旦出现语法错误,js代码一行都不会执行。

js中一个代码块的错误,不会影响另一个代码块。

8、JS运算符

优先级‘=’最弱,‘()’优先级较高

‘+’两种用途,数学运算和字符串链接符。

‘-’,‘*’,‘/’,'%',‘=’,‘()’  %(摩尔)为取余

‘++’,‘--’,‘+=’,‘-=’,'/=', '*=',  '%='

比较运算符:‘>’,'<' , '==' , '<=' , '>=' , '!='

  js比较符: 字符串比较时,比较的是asc码。但凡是比较运算符,得到的结果一定是true或false.    

var a = 1 ==1;   ,undefined ==undefined;  infinity == infinity; 均返回true, NaN == NaN 返回false。

逻辑运算符:‘&&’,‘||’,‘!’

 var a = 1 && 2  document.write('a');     输出 2

与运算符有两个表达式时:

(1)与运算符一定会返回结果,与运算符会去检查它之前的第一个表达式,并且将其转换为布尔值,如果为真(转换规则undefined,null,NaN,“”,0,false ==> false;除此之外均为true),则继续往后看第二个表达式,并且直接返回该表达式的运算结果。

(2)当第一个表达式运算结果,转换为布尔值结果为false时,直接返回第一个表达式的运算结果。 var a = 0&&2 ;   document.write('a');     输出 0

与运算符多个表达式时:

当第一个表达式转换为布尔值结果为真,则继续看第二个表达式,如果第二个表达式转换布尔值结果为假,直接返回第二个表达式的运算结果;如果第二个继续为真,则继续判断,直到下一个表达式为假时返回该表达式的运算结果,或者返回最后的表达式运算结果。

或运算符:

var event = e || window.event

非运算符

!!将一个值变为布尔值

9、条件语句

条件成立执行,反之不执行

10、循环语句

for循环

for(var i=0;i<10;i++){

document.write('a')

}

  分解:

(1)var i=0;

(2)if(i<10){

document.write('a')

}

(3)i++;

(4) if(i<10){

document.write('a')

}

(5) i++;

....循环3和4

执行顺序,先执行申明变量,在执行判断体,成立执行语句,最后执行i++;

var i=0;

for(;i<10;){

document.write('a');

i++;

}

while循环

实质就是for循环前后不写东西,即为for循环的简化版;

do{
}while(条件)循环,无论条件是否成立,都会执行一次执行体。

switch...case..

 

switch (n) {
    case 1:
         执行体1;
        break;
    case 2:
    执行体2;
    break;

default:{}      在switch.....case...中假如没有break,当他进入某个执行体后,以后每一个执行体都会执行,无论条件是否成立。

11、typeof ,类型转换

 六种数据类型 :    string  number boolean   undefined null  一种复杂类型 object  (function,array)  

typeof 区分数据类型  typeof(null)  --object  typeof  null  ----- object     typeof NaN -----number

null类型进行typeof操作符后,结果是object,原因在于,null类型被当做一个空对象引用。

类型转换:

显式类型转化

Number()

var demo = true; var num = Number(demo) -----1    经过Number转换后变为数字类型

                      demo = null ; num = Number(demo)  ------0        demo = undefined ; num = Number(demo)  ----NaN

                     demo = ‘a’; num = Number(demo) ----NaN      demo = ‘123’; num = Number(demo) ----123

parseInt(参数1,参数2)  参数2为基底    以目标参数为基底转为10进制   参数2 范围为:2----32

砍断原则,以最后以为数字为分界点,砍断,转换为整型。 

应用举例:var demo='100px'  取出其中的100 用parseInt(demo)  -- 100

parseInt(123.3) ----- 123   parseInt('123.3') ----- 123    parseInt('a') ----- NaN    parseInt(true) ----- NaN 

parseFloat()

以除了一个点以外的非数字位截止分分界点

String() 将其中的参数转化为字符串

Boolean()  将其中的参数转为bool类型

tostring()   var demo=123   demo.tostring()   将目标转换为string类型。  注意:undefined,null不能用tostring

demo.tostring(radx)   以10进制为基底转换为目标进制

 

隐式类型转化

隐式类型转化都是调用显式类型的方法

isNaN()//判断是否不是数字    该方法会将参数放到Number()方法中转化,在进行判断。

++/--    +-(正负)    调用 Number()转为数字      

var a='123'  a++ ---- 124     var b= 'abc' ----  NaN  typeof  b  ----number

var a = + 'abc'    typeof   a ---- number

+   调用String()

var a = 'a' +1 ----   a1

-  *  /  %  调用的 Number()

var  a = '1'  *  1 -----1

&&  ||    !   调用Boolean()

 

<  >  <=   >=   ==   !=   

var a = '3'>2  字符串和数字比  调用Number()    

false > true -----false     2>1>3  -----   false     2>3<1 ----- true   

undefined >0 ----false   undefined <0 ----false    undefined == 0 ----false

null > 0 ---- false     null < 0 ---- false    null == 0 ----  false

特殊的:

null == undefined ---- true      NaN == NaN ---- false   非数不等于任何

 

不发生类型转换: ===   !==   恒等于/绝对不等于     NaN === NaN ---false

js中未定义直接使用就会报错,但是有一种情况 typeof 可以输出未定义的变量,并且不会报错,还会输出值undefined

console.log(typeof(typeof(a)))  ---- string      

注意:typeof  返回值为字符串的类型

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值