初步认识JavaScript

一。如何编写js:

  1. 通过浏览器窗口编写
  2. 通过html页面中的script标签内部进行JavaScript编写
  3. 通过通过script标签的src属性引入js文件

 

 二。javascript的数据类型:2类

  1. 原始数据类型
  2. 引用类型对象

       原始数据类型:

         string-字符串

        number-数字

        boolean-布尔 (只有两种分为true和false)

        undefined-所有仅声明,未赋值的变量的没默认值(修饰原始数据类型的空)

        null -空(修饰对象的空)

        symbol(se6)

 

     2.引用类型对象:

        array(数组)

        function(函数)

三。数据类型转换-隐式转换

  1. 概念不需要程序员干预,js可以自动的完成类型转换,仅讨论算数计算时的隐式转 换算数计算中,一切数据都默认转换为数字后在做计算
  2. 减法

        boolean:true->1;false->0;

        null ->0

        underfined->NAN->not a number(不是一个数字)所以underfined不能转换为数字一些数据不能转换为数字的话,则会转换为nan,nan不等于,不大于,不小于任何值包括他自己,nan虽然表示不是一个数字,但是它本身属于number数据类型,只要nan参与了运算那么计算结果永远是NaN


        3.在加运算当中,只要碰到字符串,加号就不再是加法运算符号,而是变成了字符串拼接符号,导致另一个不是字符串的数据会变成字符串类型数据。

 

         4.Js的强制转换:程序员主动调用专门的函数(API)执行数据转换何时使用:自动转换的结果不是我们想要的结果的时候任意

1.string 2个api

x.toString() x不能是undefined或是null;

String(X)->相当于隐式转换->万能转换方式

typeof(x)->返回的结果数据类型

string->number :2个api

 

2.parseInt(str/num):从第一个字符开始,一次读取每个数字,只要碰到第一个非数字字符就停止,默认跳过开头的空字符

parseFloat(str/num):解析规则同praseInt,只不过认识第一个小数点2

四.js中的运算符

  1. 算数运算:+ - * / %(模运算) ++递增1   --递减1    %表示不取商取余数   
  2. 模运算的2个用途
  1. 判断是否能整除:比如判断奇偶性质
  2. 保证运算的结果不能超过除数
  1. ++递增1  --递减1有2种表达式:++n和n++

这两个表达式的共同点都是将n中的值递增1后,再存回n

如果上述两个表达式参与输出了,那么是有去别的

++n 返回表达式的新值(n递增后的值)

n++返回表达式的旧值(n递增前的值)

 

关系运算:将两个值作比较->true false>, < ,>= ,<=, ==, !=

        关系运算的比较规则

        1.默认将所有类型转换为数字后,再做比较

        2.如果参与比较的2个数据都是字符串

            依次取出每个字符串中的字符 pk“unicode”码

扩展赋值运算

+= -= *= /= %=

例:n=n+m -->n+=m别的同理

注意:如果n=m-n不能简化

 五.逻辑运算

概念:将多个关系运算综合起来,得出一个结论(true,false)

3种:&&(且) ||(或) !(非)

&&:2个条件都必须为true,才返回true

||:2个条件都必须为false,才返回false

短路逻辑(分支结构);

&&如果前一个条件为false,就已经得出结论false

||如果前一个条件为true,就已经得出结论true

引申出短路逻辑;

语法:1.条件&&(操作)

          条件满足,执行后续操作,不满足则不执行

          2.值1||值2

如果值1有效就用值1,否则就用值2

空字符串是一个无效值,返回false

如何在不声明新变量的情况下完成两个数的交换

x=3,y=4

x+=y x=3+4=7

y=x-y y=7-4=3

x-=y x=7-3=4

六.程序中的三种结构

1,顺序结构

2,分支结构

根据不同的条件,满足条件就执行,不满足就不执行

  1. 循环结构
  • js的三目运算

三目运算,三元运算,条件运算

根据不同的条件,执行不同的操作/返回不同的值

语法:

        条件1?值1或操作1;//满足条件1才取值1或执行操作1

        条件2?值2或操作2;

        ....?

默认值或默认操作 //上诉条件都不满足

总结:多个条件,多见识,多选一执行

如果操作的语句比较简单,建议使用三目运算

分支结构:

3种

1。if结构:一个条件一件事,满足就做,不满足就不做

结构

if(条件){

满足条件执行操作

}

2.if...else结构:一个条件2件事二选一执行

语法:

if(条件){

满足条件执行的操作

}else{

不满足条件的执行操作

}

3.if..else if ...[else]结构:多个条件多件事,多选一执行(也有可能什么都不做))

语法:

if(条件1){

满足条件1执行的操作

}else if(条件2){

满足条件2执行的操作

}[else{

上述条件都不满足执行的默认操作

}]

switch case结构:

当条件都是全等比较的时候,才可以使用swicth case结构

全等比较:不仅比较值,还比较数据类型

语法:

        switch(表达式){

         case 值1:

满足值1才执行

default:

如果前面的值都不满足,执行默认操作

 

问题:经过运行后发现switch case结构如果没有break关键词,那么会根据条件进入到满足的条件的case执行,并以此触发后续的所有case操作(),所以如果想要独立的执行分支,必须要在每个case之间添加break关键词

break:终止当前结构执行,并跳出结构

循环结构:让程序返回执行同一段代码

循环三要素:

1.循环条件:让循环反复执行的条件

2.循环变量:循环条件中用于比较的变量

循环变量总是向着不满足循环条件的趋势经行迭代的

循环体:循环内部反复执行的代码段

循环分类:

1.while循环:先判断循环条件,再执行循环体

一般情况下,当循环条件的变化没有规律的时候

while(循环条件){

循环体;

迭代修改循环变量;

}

2.do...while循环;先执行循环体,在判断循环条件

do{

循环体;

迭代修改循环变量;

}while(循环条件)

注意while循环与do..while循环基本等效,区别在于看第一个循环条件是否满足,如果满足,则两者等效,不满足,while循环一次都不执行。do...while至少执行一次

for循环与while循环等效

语法 :

for(1初始化循环变量;2循环条件;3迭代修改循环变量){

4循环体;

}

执行顺序1,2,4,3,2,4,3

for(1初始化循环变量;2循环条件;){

3迭代修改循环变量

4循环体;

}

执行顺序1,2,4,3,2,4,3

七.函数

定义:程序中封装一项专门任务的步骤清单代码段

语法:

function 函数名([参数变量列表]){

任务步骤代码段

[return 返回值]

}

函数名(任务名):指向函数定义的一个变量,保存的是函数对象的引用

声明的时候;不执行,同时也不读取内部代码

在程序的任意位置:函数名([参数值列表]);

函数调用时:才开始读取内部代码,并执行;

变量作用域:一个变量的可用范围

2种:

1.全局作用域-window

全局变量-放在全局作用域里的变量

可在程序的任意位置进行访问并修改

2,局部作用域:在函数调用的时候才会动态创建的作用域

局部变量:2种

1.参数变量

2.在函数中var出来的变量

仅在函数调用时,动态创建

并且使用变量的规则是:如果局部有,就不用全局的

调用后,局部变量会伴随着局部作用域一同销毁

 

提前声明

正式开始执行程序之前,都会先将var声明的变量,和function声明的函数,提前到当前作用域的顶部,集中声明,同时赋值留在本地

注意:函数的声明比变量的声明更置顶

变量提升示意图:

八.数组

  • 数组:

定义:一组变量的集合,连续保存多个数据引用类型的对象

如何创建数组:

  1. 创建一个空数组 var 数组名=[];

暂时不知道数组内容的时候使用,先创建再追加

2.创建数组的同时直接初始化内容

var 数组名=[值1,值2,值3]

3.创建指定个数的数组

var 数值名=new Array(n);

创建一个对象,同时初始化n个空元素

4.创建同时直接初始化

var 数组名=new array(值1,值2,值3)

注意:3和4创建数组的方式不常用,因为有分歧

var arr=new Array(7);

可以解释为初始化7个空元素

也可以解释为初始化了一个数组,只放了一个元素值为7

数组分类:

1.索引数组

下标从0开始每次递增1

length-元素个数

2.关联数组(哈希数组)

下标可以自定义,而且下标不可重复

length-失效

3.二维数组  - 元素又指向另一个子数组

下标分为行下标和列下标,都是从0开始,每次递增1

行- length获得数组中有多少个子数组对象

列- length获得子数组中元素的个数

所有数组都有下标,只不过每种数组的下标不同

都有length属性,length属性表示数组的长度,保存了多少元素

如何获得某个元素值:var 变量=arr[下标]

如何获得数组长度:arr.length

如何获得最后一关元素值:arr[arr.length-1];

undefined与null

1.所有仅声明但是未赋值的默认值-undefined

undefined为空-修饰原始数据类型

2.null-修饰对象的空

null表示一个变量不再指向任何对象的地址

null的用法有2种:

1.var 变量=null;相当于打标记

将来该变量有可能指向一个对象,只是此时声明都没有指向

2.var obj=对象;

把该对象使用完毕后,就把obj主动赋值为null,这么做的话,就能主动释放内存 ,节省 内存空间从而提高浏览器性能,内存种有个垃圾回收器,

js中的对象指的是:内存中保存一组相关数据和功能的整体

对象都是new操作符创建的

new专门在内存中开辟一个空间,保存数据和功能,返回存储地址

索引数组的下标为0开始 ,每次递增1的特性

这个 下标天生就是 一个 循环变量

下标递增到<length-循环条件

冒泡 排序:将数组中的元素按照从大到小(从小到大)的顺序进行排序;

关联数组(hash哈希数组)-可以自定义下标的数组

关联数组的key(下标)不可以重复 ,length属性失效

如何遍历hash数组:  

for(var key in obj){

console.log(obj[key])

}

 

 

猜你喜欢

转载自blog.csdn.net/cvenginner/article/details/120306543
今日推荐