JavaScript基础语法

目录

5.1.1什么是JavaScript

5.1.2JS组成

5.1.3JS特点

5.1.4浏览器内核的作用

5.1.5JS运行环境

5.1.6将JS脚本嵌入HTML页面中执行的步骤

5.1.7语法规范

5.2.1什么是变量

5.2.2变量的声明

5.2.3变量名 命名规范

5.2.4使用未声明的变量

5.2.5对变量进行的存取操作

5.3数据类型

5.3.1数据类型分类

5.3.2数据类型转换

5.3.3隐式转换

5.3.4转换函数--显示转换(强制转换)

5.4.1运算符与表达式

5.5.1函数的定义

5.5.2 函数的声明

5.5.3函数的调用

5.5.4

 5.5.5作用域

5.6.1分支结构

 5.7.1循环结构

5.7.2循环结构-while循环

 5.7.3循环结构 -do-while循环

  5.7.4for循环

5.7.1索引数组

 5.7.2关联数组(可自定义下标名称的数组)

 5.8.1数组API函数

 1.数组转字符串String(arr)

3.arr.join("连接符"):

 拼接(不直接修改原数组,而返回新数组)

 选取(slice,不直接修改原数组,而返回新数组)

 修改数组

(删除:splice)

 插入:

替换:(其实就是删除旧的,插入新的)

 颠倒数组(reverse)

排序(arr.sort)



5.1.1什么是JavaScript

JavaScript是一种运行于JavaScript解释器/引擎中的解释型脚本语言

(1)运行环境:1.独立安装的JS解释器(NodeJS)

                          2. 嵌入在(浏览器)内核中JS解析器

(2)解释型:运行之前是不需要编译的,运行之前不会检查错误,直到碰到错误为止

(3)编译型:对源码进行编译,还能检查语法错误(C/C++)

 JS使用场合:PC机,手机,平板,机顶盒

5.1.2JS组成

(1)核心(ECMAScript)

(2)文档对象模型(DOM,Document Object Model)

让JS有能力与网页对话

(3)浏览器对象模型(BOX,Brower Object Model)

让JS有能力与浏览器对话

注:完整的JS是由三部分组成的

5.1.3JS特点

(1)开发工具简单,记事本即可

(2)无需编译,直接由JS引擎负责执行

(3)弱类型语言由数据来决定数据类型

(4)面向对象

5.1.4浏览器内核的作用

负责页面内容的渲染

内核主要由两部分组成:

1.内核排版引擎解析HTML和CSS

2.脚本解释引擎解析JavaScript

注:不同版本的浏览器的内核不同

5.1.5JS运行环境

(1)独立安装JS引擎

 (2)嵌入在浏览器内核中的引擎

5.1.6将JS脚本嵌入HTML页面中执行的步骤

(1)将JS代码嵌入在元素“事件”中

             onclick:当单击元素时所做的操作

          <div id=" " οnclick="JS代码">xxx</div>

 (2)将JS代码嵌入<script>标记中

                1. <script></script>

                   允许出现网页的任意位置处

                   

 (3)将JS代码写在外部脚本文件中(**.js)

                1.创建js文件,并编写JS代码

                     ***.js

                2.在页面引入js文件

                  <script src="js文件路径"></script>

注:      <script src=" "></script>(该对标记中,是不允许出现任何内容的)

5.1.7语法规范

 1.语句

              允许被JS引擎所解释的代码

             使用分号来表示结束

             大小写敏感

            英文标点符号      

            由表达式,关键字,运算符组成

2.注释

            单行注释//

            多行注释   /* */

           sublime text中Ctrl+/

 

5.2.1什么是变量

1.变量:就是内存中的一段存储空间名,内存空间的别名,可以自定义值:保存在内存空间中的数据

2.内存:保存程序在运行过程中,所需要用到的数据8bit(比特是表示信息的最小单位)=1 byte

               1024byte=1KB

                1024KB=1MB

                1024MB=1GB

               1024GB=1TB

5.2.2变量的声明

(1)语法

声明:var 变量名;

           赋值

          变量名=值;

var userName;
var bookPricer=25.5;

注:声明过程中尽量不要省略var关键字,否则声明的是“全局变量”

例:(i)声明一个变量,保存学员年龄,值为25

var age;
age=25;
var age=25;

使用:

用console.log()或document.write()使用变量名,取代 " " 

打印 变量stuName的值到控制台上

            

var stuName="PP.XZ";
console.log(stuName);---PP.XZ
console.log("stuName");--stuName

(2)一次性声明多个变量并赋值

语法:var    变量名1,变量名2,...变量名n;

var stuName="PP.XZ",stuAge=25;stuHeight;
//等同于
var stuName="PP.XZ"
var stuAge=25;
var stuHeight;

5.2.3变量名 命名规范

1.不允许使用JS关键字和保留关键字

2.由字母,数字,下划线以及美元符号组成

3.不能以数字开头

4.尽量见名知意

5.尽量采用“驼峰命名法”

 变量名为合成词时,第一个单词全小写,从第二个单词开始,每个单词首字符变大写

                     关键字

breakcasecatchcontinuedefault
deletedoelsefalsefinally
forfunctionifininstanceof
newnullreturnswitchthis
throwtruetrytypeofvar
voidwhilewithundefined...

5.2.4使用未声明的变量

变量未被定义过,直接打印或使用console.log(stuHeight)

结果为错误

5.2.5对变量进行的存取操作

 注:=出现的话,永远都是将=右边的东西保存给=左边的变量

        =左边必须是变量

        var stuAge=30;//保存在变量stuAge

        35=30;//将30保存在35中,错误

5.3数据类型

5.3.1数据类型分类

1.原始类型

(1)数字类型

number类型(可以表示32位整数以及64位的浮点数)

注:

整数:32位即4字节

         十进制:生活中常用数字

         八进制:逢八进一

                   var n1=0123;

        十六进制:逢十六进一

                           0-9 A-F组成

                          var n2=0x123;

       小数:
                          var n1=34.56;

                          var n2=4.5e10;

浮点数:即小数,64位,8字节

(2)字符串类型

表示一系列的文本字符数据,由Unicode下所有的字符,数字,标点在内存中占2字节

例:查看字符“张”的十六进制表现方式

        结果为5f20

"张".charCodeAt().toString(16)

注:

汉字的起始字符:\u4e00;

汉字的结束字符:\u9fa5

转义字符:
         (1)\n

                  换行

         (2)\n

                  回车

        (3)\t

          一个制表符

(4)布尔类型(boolean)

    boolean类型:

           作用:用于表示条件的结果

           取值:

                    true:真,肯定的结果

                    false:假,否定的结果

例:var r1=true;

       var r2=false;

注:除条件判断外,做运算时,true可以当做1运算,false当做0运算

(5)空(null)

声明对象未赋值

(6)未定义(undefined)

1.声明变量未赋值

2.访问对象不存在的属性

5.3.2数据类型转换

 注:

 弱类型:由数据来决定变量的数据类型是什么

      var stu;//undefined

      stu=25;//number

     stu="25"//string

不同数据类型的数据在运算的过程中如何处理?

   var num1=15;//number

   var num2=13;//number

   var result=num1+num2;//28------>number

   var str1="15";//string

   var result1=num1+str1;

5.3.3隐式转换

自动转换,由JS在运算过程中,自己进行转换的操作,不需认为参与  

1.函数

            typeof()或typeof

var num1=15;
var s=typeof(num1);//获取num1的数据类型
var s1=typeof num1;

   

2.NaN

Not a Number 不是一个数字

isNaN(数据):判断是否为 非数字

是不是一个数字

结果为boolean类型

结果为true:不是一个数字

结果为false:是一个数字

注:所有的数据类型与string做+运算时,最后结果都为string

5.3.4转换函数--显示转换(强制转换)

1.toString()

将任意类型的数据转换为string类型

变量.toString();

会得到一个全新的结果,类型为string

var num=15;
var str=num+"";

2.parseInt()

整型:Integer

作用:获取指定数据的整数部分

语法:

var result=parseInt(数据);

注:parseInt,从左向右依次转换,碰到第一个非整数字符,则停止转换。如果第一个字符就是非整数字符,结果为NaN

3.parseFloat()

Float:浮点类型--->小数

作用:将指定数据转换成小数

语法:

var result=parseFloat(数据);

ex:

var result=parseFloat("35.25");//35.25
var result=parseFloat("35.2你好!");//35.2
var result=parseFloat("你好35.2");//NaN

4.Number()

作用:将一个字符串解析为number

语法

var result=Number(数据);

注意:如果包含非法字符,则返回NaN

5.4.1运算符与表达式

1.运算符

(1)算数运算符

加(+),减(-),乘(*),除(/),求余(%)

注:-可以表示减号,也可以表示负号

      +可以表示加法,也可以用于字符串的链接

ex:

var num1=15;
var num2=18;
var str1="15";

console.log(num1+num2);//33
console.log(num1+str1);//1515

(2)%:取余操作,俗称模

                作用:取两个数字的余数

var i=10%3; //i值为1

使用场合:1.判断数字的奇偶性

                   2.获取数字后几位

(3)自增&自减

(4) 关系运算符

作用:判断数据之间的大小

 (5)判断一个数据是否为数字

ex 

var input=prompt("请输入一个数据");
判断input是否为数字??


isNaN(数据)
isNaN()会抛开数据类型来判断数据是否为数字

如果数据是数字类型,则返回false
如果数据不是数字类型,则返回true

(6)逻辑运算

逻辑与:&&

逻辑或:||

逻辑非:!

注:短路逻辑

 (7)三目运算符:运算符需要三个操作

语法:表达式1?表达式2:表达式3;

注:表达式1是一个条件,值为Boolean类型

若表达式1的值为true,则执行表达式2的操作,并且以表达式2的结果作为整个表达式的结果

若表达式1的值为false,则执行表达式3的操作,并且以表达式2的结果作为整个表达式的结果

5.5.1函数的定义

5.5.2 函数的声明

语法:

function 函数名(){
   可执行语句;
}

ex

function printHello(){
          console.log("hello");
          console.log("world");
}

5.5.3函数的调用

执行函数的内容,任何js的合法位置处,都允许调用函数

语法:函数名称();

function sayHello(){
           console.log("hello");
           console.log("world");
}
sayHello();

5.5.4

 (1)定义带参数函数

function 函数名(参数列表声明)

{

//代码块(函数块,功能体,方法体)

}

ex

function printlnfo(userName,userPwd)
 {
  console.log('用户名'+userName+'密码:'+userPwd);
 }
printlnfo('Tom','123');//传递直接量做实参

(2)带返回值的函数

     

 5.5.5作用域

1.函数作用域,只在当前函数内可以访问

ex

function add(){
 var sum=1+2;          //局部变量
 console.log(sum);     //正确
}
console.log(sum);      //脚本错误

2.全局作用域,一经定义,代码的任何位置都可以的方式

 

5.6.1分支结构

if-结构

语法:if(条件表达式){

语句块;

}

流程:1.判断条件表达式结果

          2.如果为true,则执行语句块内容

          3.如果结果为false,则不执行语句块内容

注:

(1)if语句条件处,必须为boolean的值/表达式/变量

以下情况,if都会认为是false

if(0/0.0/"“/null/undefined/NaN)除以上情况以外,一律为真

if(1)
{
 console.log("真!");
}
if("我帅么"){
    console("真!");
}

(2)if语句块的{},可以被省略

如果省略,那么if只控制它下面的第一条语句

if-else结构

语法:

if(条件){

语句块1;

}

else{

语句块2;

}

else if结构(复杂if结构或多重if结构)

语法:if(条件1){

语句块1;

}

else if(条件2)

{

语句块2;

}

.........

else{

语句块n;

}

注:最后的else模块,可以选择性添加

switch-case(是一种特殊的分支结构,可以根据一个表达式的不同取值,从不同的程序口开始执行)

1.switch-case和break联合使用case

 2.switch-case的结束机制

(1)碰到break结束

(2)整个结构都执行完毕,结束直落

两个case或者多个case之间,没有任何的可执行代码,那么就以最后一块的case为主

 

 5.7.1循环结构

1.循环中的两大要素:(1)循环条件:什么时候开始,什么时候结束

                                   (2)循环体:循环体,循环过程中干了什么

5.7.2循环结构-while循环

语法:while(boolean表达式)

     {

  循环体语句;

    }

 5.7.3循环结构 -do-while循环

语法

do{
  可执行语句;
}while(boolean); //无论循环体是否满足,循环体至少执行一遍

区别:

  5.7.4for循环

语法:

for(表达式1;表达式2;表达式3)
{
 循环体语句;
}

5.7.1索引数组

1.创建空数组(2种)在创建数组时,还不知道数组中的元素内容

(1)数组直接量:var arr=[];

   (2)用new:       var arr=new Array();

ex

var arr1=[];               //定义一个不包含元素的数组
var arr2=[97,85,79]        //定义一个包含三个元素的数组
var arr3=new Array();      //定义一个不包含元素的数组
var arr4=new Array("Tom","Mary","John");//定义一个三个字符串元素的数组

       2 .创建数组同时初始化

     (1)  数组直接量:var arr=[元素1,元素2,.....];

      (2)用new:var arr=new Array(元素1,元素2.....);

var array=[4500,5000];
var array=new Array('数组');

 

 3.数组的length属性

数组理论上的元素个数length属性的值永远是最大下标+1

4.数组的遍历

var nums=[50,90,20,10];
for(var i=0;i<nums.length;i++)
{ 
        nums[i]+=10;
}
//元素下标从0开始,到length-1结束

 5.7.2关联数组(可自定义下标名称的数组)

 注:关联数组只能用for..in循环

for(var key in hash)
{
   key //只是元素下标名
   hash[key] //当前元素值
}

对比!!!

 5.8.1数组API函数

 1.数组转字符串String(arr)

将arr中每个元素转为字符串,用逗号分隔

固定套路:对数组拍照:用于鉴别数组是否被修改过

3.arr.join("连接符"):

将arr中每个元素转为字符串,用自定义的连接符分隔

var chars=["H","e","l","l","o"];
console.log(chars.join(""));          //Hello

 拼接(不直接修改原数组,而返回新数组

 选取(slice,不直接修改原数组,而返回新数组)

slice()

var subArr=arr.slice(starti,endi+1)

注:凡是两个参数都是下标的函数,都有一个特性:含头不含尾

var arr1=[10,20,30,40,50];
var arr2=arr1.slice(1,4); //20,30,40
var arr3=arr1.slice(2);//30,40,50
var arr4=arr1.slice(-4,-2) //20,30

console.log(arr1);      //现有数组元素不变

 修改数组

(删除:splice)

arr.splice(starti,n);

 插入:

arr.spilce(starti,0,值1,值2.....)

替换:(其实就是删除旧的,插入新的)

arr.splice(starti,n,值1,值2,...)

var arr1=[10,20,30,40,50];
arr.reverse();
console.log(arr1);

 颠倒数组(reverse)

注:仅负责原样颠倒数组,不负责排序

排序(arr.sort)

注:只能排列字符串类型元素

5.9.1作用域(提高程序可靠性,减少命名冲突)

1.全局作用域(整个script标签或者一个单独的js文件)

2.局部作用域:在函数内部就是局部作用域  这个代码的名字只在函数内部起作用和效果

3.全局变量:在全局作用域下的变量,在全局下都可以使用

注:在函数内部没有声明的变量,即直接赋值的变量也属于全局变量

4.局部变量:(函数的形参也是局部)

5.从执行效率看全局变量和局部变量:

(1)全局变量:在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存

(2)局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化,当代码运行结束后,就会被销毁,因此更节省空间

5.9.2作用域链

1.内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值,这种结构我们称作作用域链

5.10.1预编译

1.js引擎运行js分为两步: 预解析 代码执行

  (1)预解析 js引擎会把js里面所有的var还有function提升到当前作用域的最前面

  (2)代码执行 按照代码书写方式的顺序从上到下执行

2.预解析 变量预解析(变量提升)和函数预解析(函数提升)

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

  (2)函数提升就是把所有函数声明提升到当前的作用域最前面 不提升调用操作

ex

<script>
    var num=10;
    fun();
   function fun(){
   console.log(num);
   var num=20;
   }
</script>

相当于

var num;
fuction fun(){
var num;
console.log(num);
num=20;
}
num=10;
fun();
 

//内外都执行

输出undefined

5.11对象

1.对象是由属性方法组成的

(1)属性:事物的特征,在对象中用属性来表示(常用名词)

(2)方法:事物的方法,在对象中用方法来表示(常用动词)

5.11.2创建对象的三种方法

1.利用对象字面量创建对象

var obj={
     name:'li',
     age:18,
     sex:'女',
     sayHi:function(){
       console.log('hi~');
      }
}

 2.利用new object创建对象

var obj=new Object();  //创建了一个空对象
obj.name='li';
obj.age=18;
obj.sex='男';
obj.sayHi=function(){
 console.log('hi~');

}

注:利用等号赋值,分号结束

调用方法:(1)console.log(obj.name);

                     (2)console.log(obj['sex'];

                         obj.sayHi();

3.利用构造函数创建对象(利用函数,重复相同代码)

构造函数:把对象里面一些相同的属性和方法抽象出来封装到函数里面

语法格式:

function 构造函数名(){
          this.属性=值;
          this.方法=function(){}
}
new 构造函数名();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值