Javascript 基础语法学习笔记

本文介绍了JavaScript的基本概念,包括变量声明与初始化、数据类型(数字、字符串、布尔、undefined和null)、运算符、流程控制(顺序结构、分支和循环)、函数、作用域、数组、内置对象(Math和Date)以及对象和数组的操作。
摘要由CSDN通过智能技术生成

一,初识
1:引入js

(1)外联

<script src="/js/flexible.js"></script>

 (2)内联
 

   <script>
        //内联
    </script>

(3)行内

<div onclick="alert('nihao')"></div>

2,注释

         //单行 

         /*多行*/

3.警告框

             alert();警告框

            confirm();选择框

            prompt();输入框

            console.log();控制台输出

二,变量

1,变量是程序在内存中申请 的一块用来存放数据的空间

2,使用:


声明变量  var age

赋值      age=18;

变量的初始化  var age = 18;  (声明并且赋值称为变量的初始化)

3语法扩展

更新变量

var age= 18;

  age = 20;



声明多个变量

var age = 18,name = ‘’佩奇’’;

4变量命名规范

4.1由字母,数字,下划线,$组成

4.2严格区分大小写

4.3不能以数字开头,不能使用关键字,保留字

4.4遵守驼峰命名法

5临时变量

var temp ;

var app1 = 10;

var app2 = 20;

temp = app1;

app1 = app2;

app2 = temp;

temp就像是一个中介,暂时储存临时变量

三 数据类型

1    

js 变量的数据类型,是由js引擎根据 = 右边变量的值(字面量)的数据类型来判断的

2,js是动态语言,变快的数据类型可以变化的

例:


var age = 18;  

 age = "佩奇";

3基本数据类型
 

number 数字型

boolean 布尔值

string  字符串

undefined 未定义

null  空值

3.1  number

包含整数,小数,负数

八进制用  0 表示

十六进制  0x

Number.MAX_VALUE   最大值

Number.MIN_VALUE   最小值

Infinity 无穷大

-Infinity 无穷小

NAN (not a number) 不是一个数字

is  NAN ();判断是否数字   false 是数字    true不是数字类型

3.2 string

字符串引号嵌套  外单内双  外双内单

\转义字符    \n 换行

字符串长度  length

字符串拼接   +     如 ;‘1’+‘2’   返回值‘12’

字符串和任何数据类型  + 都会转换为字符串

3.3boolean

布尔型有两个值,true false 其中true 表示真,false假

true当 1 计算 , false当0 计算

4 undefined 和 null

Undefined 和 nan 和数值 相加 为NAN

Null 和数值相加 返回相加的数值

5 typeof 获取变量类型

 typeof + 变量

6字面量

字面量是一种直接出现在程序中的数据值

7 转换为字符串

tostring()

string()

+

8转换为数字型
 

parselnt();

parseFloat();

Number();

js隐式转换    -   *  /

9 转换为布尔型

'', 0 ,NAN ,undefined,null  代表为空,否定的值转换为false 

其余转换都为 true

10  标识符

标识符是就是为 变量,函数,参数取的名字

关键字

js 本身已经使用的单词

保留字

js为未来预留的可能会用到的单词

四 运算符

4.1运算符也被称为操作符 ,是用于实现赋值比较和执行算数运算功能的符号

4.2算数运算符

+ - * / %

4.3表达式 和返回值

由数字 运算符,变量等组成的式子,称为表达式

结果为返回值

4.4一元运算符

a++   后置自增 先返回原值后自加

++a   前置自增 先自加后返回值

a--

--a 

4.5 比较运算符
 

<  <=  小于 小于等于

> >=   大于 大于等于

== 等于

===  全等

!=   不等于

!==  不全等

=  赋值

4.6逻辑运算符

&& 逻辑  与 简称 与 或and

   ||  逻辑或   or

&&两边都为true 返回true 否则 false

|| 两边都为false 返回 false  否则 true

!  取反

4.7 赋值运算符

= 

+=

-=

*=

/=

%=

4.8 运算符优先级

1  ()

2    一元运算符

3   算法运算符

4 关系运算符

5 相等运算符

6 逻辑运算符

7 赋值运算符

8 ,

五 流程控制

5.1

顺序结构  按顺序执行

分支结构 判断执行

循环结构 判断后是否循环执行

5.2  分支结构

1

if()语句

   if(条件表达式){

           条件表达式为真 执行语句

}

2  if else

 if     else 语句

if(条件表达式){

  条件表达式为真 执行语句



}else{

  条件表达式为假 执行语句

}

3  if else if

if  else if  语句

if(条件表达式){

  条件表达式为真 执行语句



}else if(条件表达式){

  条件表达式为真 执行语句

}else{

    条件表达式为假 执行语句

}

4 三元表达式

条件表达式 ? 表达式1(true):表达式2(false)

5 switch

switch(表达式){

Case valu 1 :

执行语句

Break;

Case valu 2:

执行语句

break;

}

5.2循环结构

1 for循环

for(初始化变量,条件表达式,更新表达式){

  循环体}

2  双 for循环

for(初始化变量,条件表达式,更新表达式){

  循环体

for(初始化变量,条件表达式,更新表达式){

  循环体

}

}

注意:外部循环一次,里面for循环整轮

3  while 循环

while (条件表达式){

循环体

(更新表达式)

}

4 do while 循环

do{

循环体

}while(条件表达式);

总结 ;如果是用来计次数,跟数字相关用for

while do while 可以用来做更复杂的判断条件

5 continue  break

Continue ;跳出本次循环,继续执行下面的循环

break ;跳出整个循环(循环结束)

6数组

6.1数组(array);就是一组数据的集合,储存在单个变量下的优雅方式

6.2数组创建

 1 利用字面量创建

var arr = [];

2利用new创建

var arr = new Array();

3数组的索引

索引,下标,用来访问数组元素序号

数组名【索引】

arr[2];

4遍历数组

遍历就是把数组元素从头到尾访问一次



 for (let i = 0; i < array.length; i++) {

                 console.log(array[i]);

             }

5新增数组,元素,修改length长度

arr.length = 5 ; 多余的显示“undefind”

6 新增数组元素,修改索引号,追加数组元素

 arr[3] = '数组索引号3内容';

七 函数

函数就是封装了一段可以被重复执行调用的代码块

目的;就是让代码可以复用,

7.1  使用函数

声明函数

function fun (){

    函数体;

}



调用函数

fun();//函数名()

注意:如果实参的个数一直,则正常输出结果

若实参的个数多于形参个数,会去到形参的个数

如果实参的个数小于形参,多于的形参定义为  undefined 最终的结果就是NAN

7.2 函数的返回值

function fun() {

    return 需要返回的结果

}

 fun();

注;return 会把返回结果给函数调用,但是return后的代码不会执行

7.3  
 

arguments

不确定有多少个参数传递的时候可以使用 arguments来获取,

arguments 当前函数的内置对象,arguments中储存了传递的所有实参

arguments 展示形式是一个伪数组 因此可以遍历

伪数组的特点,具有lenght属性,按索引方式储存数据,但是不具备 push pop 等方法

7.4 函数的声明方式2 ,函数表达式(匿名函数)

var fun = function () {

    

}

//fun 是函数名,函数表达式也可以传递参数

八 作用域

8.1

 js作用域;就是代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性,更重要的是减少命名冲突

   Js的作用域(es6之前):全局作用域 局部作用域

全局作用域:就是整个script标签,或者是一个单独的js文件

局部作用域;就是在函数内部的就是局部作用域范围,只在函数内部起效果,和作用

8.2

变量作用域 ;根据作用域的不同,变量分为全局变量和局部变量

在全局作用域的声明的变量就是全局变量

在(局部作用域)函数内部声明的变量就是局部变量

注:在函数内直接赋值也是全局变量,

全局变量在浏览器关闭是清除,局部在使用后,不占内存

8.3 作用域链

作用域链;内部函数访问外部变量采用的是链式查找方式,这种结构称之为 作用域链

九  预解析

9.1 js引擎运行js分为两步;预解析 ,代码执行

预解析:就是js引擎会把js里面所有的var和function提升到当前作用域的最前面

9.2 预解析 为 变量预解析(变量提升 )   ,函数预解析(函数提升)

1变量提升:就是把所有变量声明提升到当前的作用域最前面,不提升赋值操作

2 函数提升 把所有的函数声明提升到当前作用域最前面,不调用函数

十  对象

对象式由属性和方法组成的

10.1创建对象的三种方式

1利用字面量{}创建

var obj = {

    name:'佩奇',

    age:12,

    sayHi:function (){

        //方法

    }

}

使用对象

obj.name//对象名.属性

obj['name']//对象名['属性']

使用对象的方法

obj.sayHi();//对象名.方法名

2 利用new object 创建


        var obj = new Object();

        obj.属性 = '属性值';

        obj.方法名 = function (){};

3 构造函数创建对象

function 构造函数名 大写(){

    this.属性 = 值;

    this.方法 = function(){};

}

var obj = new 构造函数名;

注;构造函数需要首字母大写,   不需要return 就能返回结果

例子

function Star ( name,age ,sex) {

    this.name = name;

    this.age = age;

    this.sting = function (){



    }

}

var star = new Star('刘大海',28,'男');

console.log(star);

10.2

遍历对象  

for (let k in object) {

    //k是属性 , object 是对象  

   object[k];//对象属性值

}

对象是复杂数据类型

十一  js 内置对象

内置对象就是js 语言自带的

11.1  数学对象 Math

Math.PI//圆周率

Math.max//最大值

Math.min//最小值

Math.floor//向下取整

Math.ceil//向上取整

Math.round//四舍五入

Math.abs//绝对值

随机生成一个数

function getRandom (min,max){

    //随机生成两个数之间的 数

    return Math.floor(Math.random()*(max-min+1)+min)

}

11.2  Date();日期  (构造函数)

      var date = new Date();

        date.getFullYear()//年

        date.getMonth()//月  0-11

        date.getDate()//日

        date.getDay()//星期  0-6

        date.getHours()//时

        date.getMinutes()//分

        date.getSeconds()//秒



        date.valueOf()//时间戳

        date.getTime()//时间戳

        var data = +new Date()//时间戳

        Date.now()//时间戳

        转换公式

        d = parseInt(总秒数 / 60 /60 / 24);//天

        h = parseInt(总秒数 / 60 /60 % 24);//时

        m = parseInt(总秒数 / 60 %60 );//分

        s = parseInt(总秒数 % 60 );//秒

十二 数组

  var arr = new Array();//空数组

  var arr = new Array(2);//数组长度为2

  var arr = new Array(2.3);//数组元素为 2 3 

        
12.1 reverse(arr)  数组翻转



12.2 instanceof 运算符可以用来检测是否为数组
         var arr = [1,2];

        console.log(arr.reverse());



        console.log(arr instanceof Array);



12.3

console.log(Array.isArray(arr));

12.4 添加 删除 数组元素

    var arr = [1,2];

        push();//像数组末尾添加一个或者多个元素

        arr.push(4);

        unshift();//像数组第一个位置添加元素

        arr.unshift(0);

        push,unshift 完后返回的是新数组长度,原数组会发生改变

        console.log(arr);

         pop()//删除数组最后一个元素,一次只能删除一个

         arr.pop();

         shift();//删除数组第一个元素

         arr.shift();

         console.log(arr);

pop shift 之后返回的结果是 删除的那个元素,元素组会改变

12.5 数组排序

      var arr = [5,8,3,2];

        arr.sort(function (a,b) {

          return  a-b;

return  b-a;//降序排列



        })

        console.log(arr);

12.6 indexof(元素);返回该数组索引号,并且只返回满足条件的第一个,若找不到返回-1

数据去重     

 var arr = [5,8,5,3,2,8,3,2];

        var newarr = [];

        for (let i = 0; i < arr.length; i++) {

          if(newarr.indexOf(arr[i] )=== -1){

              newarr.push(arr[i]);  

          }

        }

        console.log(newarr);//结果[5, 8, 3, 2]

Lastindeof() 从后向前找

12.7 数组转换为字符串

      var arr = [5,8,5,3,2,8,3,2];

        var a = arr.toString();

        var  b =  arr.join('*');

        console.log(b);

        console.log(typeof a);

        console.log(typeof b);

12.8

 concat();合并两个或者多个数组

 concat(arr1,arr2,arr3);

12.9

splice(从第几个索引开始,删除个数(可以选填),插入元素(可选));

       arr.splice(2,2,8);//从索引为二的开始删除,删除两个,添加一个元素8

被删除的元素组成一个新的数组

十三  字符串对象

13.1 字符串的不可变:指的是里面的值不可变,虽然看上去可以改变内容,但是其实是地址值变了,内存中新开辟了一个内存空间,

13.2

str .indexOf(要查找的字符,起始的位置)

lastindexOf 从后向前找

13.3根据位置返回字符

   var str = 'ndianfinsnf';

         var a =  str.charAt(5);

         console.log(a);//返回的是索引为5的 f 

   var n =  str.charCodeAt(6)

         console.log(n);//返回的是索引为6的 ASCii值  



 str[5]//h5新增的方法,和charAt()一样

       console.log( str[5]);

13.4 拼接字符串


    concat(str1,str2,str3)

        //拼接字符串,但是一般开发中中 +  操作比较多

13.5 substr 截取字符串

    var str = 'ndianfinsnf';

        substr(开始截取的位置索引号,截取的个数)第二个参数不写默认截取到最后一个

       var b= str.substr(2);//

       console.log(b);

13.6  split()

       var str = 'nd,an,fins,nf';

        var b= str.split(',');

        console.log(b);

13.7 repiace

    var str = 'nd,an,fins,nf';

        str.replace('被替换的字符','替换成的字符')//注意只会替换第一个字符

        var sr = str.replace('n','d');//替换字符

         console.log(sr);

13.8

  var str = 'nd,an,fins,nf';

        var b = str.toUpperCase();//转换为大写字母

        console.log(b);

        var a = str.toLowerCase();//转换为小写字母

        console.log(a);

十四  简单数据类型和复杂数据类型

14.1

简单类型又叫基本数据类型或者 值类型 ,复杂数据类型又叫引用数据类型

值类型: 简单数据类型/基本数据类型,在存储时变量中储存的是值本身, 因此叫做值类型,string,number,boolean,undefined,null

引用类型:复杂数据类型,在储存时变量中储存的仅仅是地址值(引用),因此叫引用类型,通过new关键字创建的对象,(系统对象,自定义对象)比如Object,Date Array等

14.2 堆和栈

 堆和栈空间分配

1 栈 (操作系统):由操作系统自动分配释放存放在函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈;

   简单数据类型存放在栈里面

2堆(操作系统):存储复杂数据类型(对象);一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收

  复杂数据类型存放在堆里面

 

注意:js没有堆和栈的概念,只是通过堆和栈理解代码执行机制,便于学习

14.3

 简单数据类型传参,直接在栈存储值

 复杂数据传参,在栈开辟一个空间储存的是十六进制的地址值,地址值指向堆的一个开辟空间

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值