[ JAVA]介绍JavaScript

目录

JS的作用

 浏览器如何执行JS

JavaScript组成

 JS书写位置

 JS基础语法

JS的数据类型 

NaN是什么?

 JS的数据类型转换

JS的运算符有几种

流程控制

JS数组

JS函数 

 JS对象


JavaScript简称JS,是一门面向对象的编程语言,JS是运行在客户端的脚本语言(不需要编译)

现在也可以基于Node.js技术进行服务器端编程。

JS的作用

表单动态校验(JS最初的目的)例如验证动态输入的账户密码是否符合标准

网页特效 像淘宝网中的图片点击左右导航<>便会有换页操作

还有像这种滚动的商品,单纯依靠css和html实现不了,需要用到js

 浏览器如何执行JS

浏览器分为两部分:渲染引擎和JS引擎

渲染引擎:用来解析HTML和CSS,俗称内核。比如chrome浏览器的Blink/Webkit,Firefox的Gecko内核

JS引擎:也称为JS解释器,用来读取网页中的JavaScript代码,对其处理后运行,比如chrome浏览器的V8

JavaScript组成

由三部分组成:

ECMAScript:JS基础语法(比方js中如何声明变量常量,定义对象,包括流程控制里的分支,然后循环如何去写,都是由ECMAScript定义的)在ECMAScript基础之上,还分为DOM(文档对象 )和 BOM(浏览器对象)

JS的主要应用方向,一个是表单校验,另外一个是网页特效,想完成这些都要用到DOM和BOM

 JS书写位置

1.JS有三种书写位置:

行内式:将JS代码写在以on开头的属性中

内嵌式:将JS代码写在script标签中

外链式:将JS代码写在一个独立的js文件中,再用script标签引入 

行内式

<button onclick="alert('我被点了一下')">点我</button>

 内嵌式

<script>

     alert("Hi,我是一个警告框")

</script>

2.script标签可以写在html文件的head和body中,推荐写在body的最下面

 外链式:

代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="alert('我被点了一下')">点我</button>
</body>
</html>

结果显示:

外链式 :

新建另一个js文件

然后在另一个文件引入:

 结果显示:

说明以上引入的方法起效

三种方式对比 :

外链式:维护性高,可缓存(加载一次),扩展性复用性高(推荐)

内嵌式:比较常用,一般写在body的最下面

行内式:简单直接,但是不能写大量代码,大量代码会导致可读性变差,所以比较少用

 JS基础语法

程序语言,一通百通

原因1:基础语法相似度极高

原因2:编程思想建立后,学习能力会大大加强

变量:JS是一种弱类型语言,声明变量时不需要指定数据类型(Java则需要指定)

JS声明变量的关键词 var;示例:

var username=“root”;console.log(username)[将username内容打印出来]

运行结果:将结果打印在了Console;

JS的数据类型 

JS将数据类型分为两类:

第一类简单数据类型(Number,Srtring,Boolean,Undefined,Null)

第二类复杂数据类型(Object)(数组,对象,函数)

代码演示:

 注意点:

JS变量的命名规则和Java一样

变量的数据类型和上下文有关,变量中保存了什么数据变量的数据类型就是什么

数据类型检测

typeof可用来获取检测变量的数据类型

NaN是什么?

NaN(Not a Number):代表一个非数值

isNaN:用来判断一个变量是否为非数字的类型,返回true或者false

 JS的数据类型转换

  • 将其他类型转换为字符串
  • 将其他类型转换为数值型
  • 将其他类型转换为布尔型

1.三种方式转字符串

<script>
   var flag=true;
   console.log(flag.toString());
</script>

执行结果:字符串在终端里面是黑色

 当然,我们也可以直接用typeof直接查看结果是否转换成功

<script>
   var flag=true;
   console.log(typeof flag.toString());
</script>

结果:

还可以用String(flag)

<script>
   var flag=true;
   console.log(String(flag));
</script>

结果:

<script>
   var num=10;
   console.log(num.toString());
   console.log(num);
</script>

 结果:蓝色的是数值型

num+' ' 空字符串 ——>被自动转换成字符串

<script>
   var num=10;
   console.log(num+'');
</script>

 转数值型

正常情况下:将数组型字符串转为数值型(“123”,“3.1415”,...)

正常转换:

隐式转换:

 

特殊情况:

普通字符串,布尔型,Underfined,noll统统转为NaN(非数字)

    console.log(parseInt('a123px'));
    console.log(parseInt(true));
    console.log(parseInt(undefined));
    console.log(parseInt(null));

结果:

Number函数的特殊转换


    console.log(Number(true));
    console.log(Number(false));
    console.log(Number(undefined));
    console.log(Number(null));

结果:

转布尔型

Boolean():将其他类型转为布尔型

1,非空字符串和数值型转为true

console.log(Boolean('小白'));
console.log(Boolean(12));
console.log(Boolean(3.14));

2,空字符串,0转为false

console.log(Boolean(''));
console.log(Boolean(0));

3,其他转为false

console.log(Boolean(NaN));
console.log(Boolean(null));
console.log(Boolean(underfined));

JS的运算符有几种

JavaScript中运算符有如下几种:

算数运算符,自增自减运算符,比较运算符,逻辑运算符

算术运算符:

 我们首先要知道浮点数在运算时会有精度问题

console.log(0.1+0.2);    //0.3000000000000000004
console.log(0.07*100);    //7.3000000000000000001

这里我们引用 toFixed(num); 它的作用是只保留小数点后几位

console.log((0.1+0.2).toFixed(1));    //0.3

自增和自减运算符 

自增:++,例如:num++ \ ++num

自减:--,例如:num-- \ --num

console.log(a++);      //18
console.log(--b);      //5

 比较运算符:

逻辑运算符:

赋值运算符 

 运算符优先级

var a = 6 ==="6";
console.log('a:',a);

因为===的优先级大于=,所以先算后面再赋值给前面,值相等但数据类型不一样

流程控制

目的:让程序按照我们设计好的逻辑来执行

流程控制主要有三种结构,分别是顺序结构,分支结构和循环结构,这三种结构代表三种代码执行的顺序

if...ease结构

<script>
    var age=20;
    if(age>=18){
       console.log('成年人');
    }else{
        console.log('未成年人')
    }

    if(true){
        console.log('---------');
    }

    var score=98;
    if(score>=90){
       console.log('优秀');
    }else if(score >= 80 && score <90){
        console.log('良好');
    }else if(score >= 60 && score <80){
        console.log('合格');
    }else{
        console.log('不合格');
    }
   </script>

 三元运算符

判断表达式?值1:值2;

var a=10;
var b=6;

console.log(a>b?'大于':'小于'); //大于
//判断a的数据类型是否等于string,结果不为字符串型,值为false,则走到后面的a-b=4
var result = typeof a == 'string'?a+b:a-b;
console.log(result);

三元运算符很多时候可以代替if...else结构(在程序块内容比较少的时候 )

var age=20;
console.log(age>=18?'成年人':'未成年人');

 switch分支结构

var char = 'e';
switch(char){
  case'a':
   console.log('A级-优秀');
   break;
  case'b':
   console.log('B级-良好');
   break;
  case'c':
   console.log('C级-合格');
   break;
  default:
   console.log('D级-垃圾');
   break;

}

循环结构

while循环,for循环,do...while循环

循环必须有一个结束点,否则就变为死循环

var i = 0;
while(i<10){
  //document.writeln能将数据输入到页面上
  document.writeln(i);
  i++;
}

  for循环

 循环嵌套

  

for(var i = 1;i <= 9;i++){
  for(var j = 1;j < = i;j++){
     documnet.writeln(i*j+'&emsp;');
}
     doucument.writeln('<br>');
}

  do...while

var i = 0;

do{
 console.log(i++);
}while(i<10)

相关关键词

continue:退出本次(当前次的循环)继续执行剩余次数循环

break:退出整个循环

JS数组

数组:在一个变量中保存多个数据,在JavaScript中数组的单元可以存放任意类型的数据

创建数组有两种方式:数组字面量和 new 关键字,单元之间使用,进行分隔

创建数组

方式一:数组字面量(最常用)var arr1=[1,2,3];

方式二:new Array           

var arr2=new Array(1,2,3);

数组的单元可以存放任意类型的数据

var arr3=[1,'比亚迪','汉',true]

数组都是通过下表(索引)来控制的

var arr=[1,'比亚迪',‘汉’,true];

console.log(arr[1]);  //比亚迪

console.log(arr[2]);   //汉

也可以更改以上索引的值

arr[1]='劳斯莱斯';
arr[2]='300万';
arr[3]='幻想';

遍历数组 

第一种方法:

var stars=['迪丽热巴','古力娜扎','马尔扎哈'];
for(var i=0;i<stars.length;i++){
  console.log(star[i])
}

结果显示

第二种方法:

var stars=['迪丽热巴','古力娜扎','马尔扎哈'];

stars.forEach(function(item,index){
  //item:每次循环的单元值
  //index:每次循环的单元索引
  console.log(item,index)
})

结果显示

JS函数 

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

优点:一次编写,随处调用

js中的函数和Java中的方法非常类似

JS函数:function 函数名(形参1,形参2,....){

               程序块;

                return xxx;

}

Java方法:public 返回值类型 方法名(形参1,形参2,....){

                   程序块;

                   return xxx; 

}

代码举例:

 <script>
   //声明函数
   function add(a,b){
    return a+b;
   }

   //调用函数
   console.log(add(10,20));
   </script>

 结果显示:

变量作用域

全局作用域:在函数体外声明的变量,在整个script标签范围内都有效

<script>
  //全局变量,在script标签范围内都是有效的
  var name="王小明";
  var age= 8;

  function show(){
    //在show函数中可以调用name和age变量
    console.log("大家好,我叫"+name+",今年"+age+"岁");
  }

  show()
   </script>

结果显示:

局部作用域:在函数体内声明的变量,只在函数体内有效

function init(){
   var a=10;
}
init()
console.log(a);

结果显示报错:无法调用

作用域链:

 <script>
    var name="王小明";
  function  fn1(){
    function  fn2(){
      function  fn3(){
        console.log(name);
      }
      fn3();
    }
    fn2();
  }
//调用fn1
  fn1(); 
            
   </script>

调用fn1,里面嵌套了fn2,然后调用fn2,里面嵌套了fn3,调用fn3,执行打印语句,打印出name

其他函数声明方式

字面量方式:var 函数名 = function(形参1,形参2,...){
            程序块;
            return返回值;
           }

var add = function(a,b){
      return a+b;
}
add(10,20)

匿名函数:

function(形参1,形参2,...){

 程序块;

return 返回值;

}

自调用函数:

function(形参1,形参2,...){

 程序块;

return 返回值;

}(实参1,实参2)

(function (a,b){

  console.log(a+b)

})(10,20)

(function show(name){
  console.log("我叫"+name)
})("张无忌")

 结果显示:

 JS对象

在JavaScript中,对象是一组无序的相关属性和方法的集合,所有事物都是对象,例如字符串,数值,数组,函数等

创建对象有三种方式:字面量,构造函数,new Object()

var obj={                           

key:value,

key:value,

}

key(键):相当于属性名

value(值):相当于属性值,可以是任意类型的值(数值型,字符串型,布尔型,函数等)

字面量:Java中声明类方法 VS  JS中字面量方式声明对象的方法

字面量声明的对象不需要实例化,用的时候直接调用属性:对象名.key(例如:Star.name)

另外一种方式调用属性:对象名[key] (例如:Star["name"])

 代码演示:

var Star={
 name:'李老师',
 age:18,
 gender:'男',
 sayHi:function(){
   alert('大家好,我是正经的李老师');
}
};

var name="age";

console.log(Star.name);
console.log(Star["name"]);
console.log(Star[name]);

Star.sayHi()

 结果显示:

其中的方法调用

  遍历对象

for...in语句用于对数组或者对象的属性进行循环操作

for(var k in odj){

//k保存属性名

console.log(k);

//obj[k]是属性值

console.log(obj[k]);

}

代码示例:

 要遍历star这个对象,这个对象一共有四个单元,第一次循环将name保存到k中,console.log[k]就会输出name,而console.log(star[k]);则会输出黄老师;一定不能用 .k,因为 .k的k是固定的名字,而这里的k是固定的变量,第二次循环将age保存到k里面,然后输出star[k]就是18,....

<script>
   var Star={
 name:'李老师',
 age:18,
 gender:'男',
 sayHi:function(){
   alert('大家好,我是正经的李老师');
}
};

for(var a in Star){
  console.log(a);
  console.log(Star[a]);
}
  
   </script>

结果:

切记千万不能用.a  console.log(Star.a);

内置对象

内置对象就是JS本身提供的对象

JavaScript提供了多个内置对象:Math,Date等

它能帮助我们编程,提高我们开发的效率,下面是MDN在线手册的地址,打开这个网页:

点击JavaScript,有各种使用教程和方法

 Math对象

Math对象拥有一些数学常数属性和数学函数方法 

  <script>
  //向下取整(舍去法)
  console.log(Math.floor(6.9)); //6

  //向上取整(进一法)
  console.log(Math.ceil(6.1));  //7

  //四舍五入
  console.log(Math.round(5.4));
  console.log(Math.round(5.5));

  //0~1之间的随机数
  console.log(Math.random);

   </script>

结果显示:

 Date对象

Date对象用来处理日期和时间

获取当前时间:var now = new Date();2050

获取指定时间的日期对象:var future = new Date('2025/5/1');

<script>
  //获取当前时间
  var now = new Date();
  console.log(now);
  
  //获取指定时间
  var d = new Date('2012-12-12 10:20:30');
  console.log(d);

</script>

  日期格式化

输出:例  2012-12-12        05:05:05  格式

1.先实例化Date对象

2.使用对象分别调用6个方法获取年月日时分秒,最后在拼接字符串

<script>
  var date = new Date(); //得到当前时间的时间对象
  var y = date.getFullYear();
  var m = date.getMonth()+1;
  var d = date.getDate();
  var h = date.getHours();
  var i = date.getMinutes();
  var s = date.getSeconds();
  console.log(y+'-'+m+'-'+d+''+h+':'+i+':'+s);

</script>

结果显示:

时间戳:

时间戳是指格林威治时间1970 年 01 月 01 日 00 时 00 分 00 秒 (北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒) 起至现在的总秒数(10位)或总毫秒数(13位)用于同步不同计算机之间的时间,确保数据的一致性和准确性。

在数据库中保存日期保存时间时,用的大多是时间戳,但是取出来要显示出年月日时间,所以时间戳是用来保存,但是显示的时候要把它转为年月日时分秒。

获取时间戳(1970.01.01 00:00:00)

JavaScript中的时间戳是毫秒数(比秒多了三位)

JavaScript获取时间戳有三种方法:

var date = new Date();              date.valueOf()        date.getTime()

案例:

 <script>
 //获取当前时间的时间戳
 var d =new Date();
 console.log(d.valueOf())
 console.log(d.getTime());

 var d1=Date.now();
 console.log(d1);
 
 //获取指定时间的时间戳
 var d2 = new Date("2008-08-10 10:10:10");
 console.log(d2.valueOf());
 console.log(d2.getTime());

   </script>

结果显示:

时间戳转具体的年月日

在实际化开发时,我们可以将时间戳传入实例化,这个时间戳就能转为时间对象

案例:

 <script>
 var t1=1238957281929;
 var t2=1538290382900;

 var date=new Date(t1);
 var y = date.getFullYear();
  var m = date.getMonth()+1;
  var d = date.getDate();
  var h = date.getHours();
  var i = date.getMinutes();
  var s = date.getSeconds();
  console.log(y+'-'+m+'-'+d+''+h+':'+i+':'+s);

   </script>

显示结果:

  数组对象

这四个方法会修改数组本身

push(a,b,...)

案例:

//push(a,b...)向数组的末尾添加一个或更多元素,并返回新的长度
 var arr=[1,'aa',3.14,true];
 console.log(arr.push(2,'bb'));
 console.log(arr);

pop()

案例:

//pop() 删除并返回数组的最后一个元素
 var arr = [1,'aa',3.14,true];
 console.log(arr.pop());
 console.log(arr.length);

数组对象

join()

 <script>
    var arr=['啾啾','琪琪','六六'];
    console.log(arr.join('-'))

 </script>

splice()

<script>
    var arr=['啾啾','琪琪','六六'];
    //参数1:从哪个单元开始删除
    //参数2:要删除几个单元
    //返回值:被删除的单元
    console.log(arr.splice(1,1));
    console.log(arr);
</script>

 字符串对象

 代码演示:

var str='abcdefjabc';

    //charAt(index) 返回在指定位置的字符
    console.log(str.charAt(1))

    //indexOf()/lastIndexOf()
    //找到指定字符串第一次/最后一次出现的索引
    console.log(str.indexOf('c'));
    console.log(str.lastIndexOf('c'))

    //tolowerCase()/toUpperCase()
    //转换为小写字母\转换为大写字母
    console.log(str.toUpperCase());
    console.log('ABC'.toLowerCase());

    //slice()/substr() 截取字符串
    //slice()有两个参数
    //参数1:指定截取的起点
    //参数2:可选参数,指定截取的终点(不包含终点)
    console.log(str.slice(1));
    console.log(str.slice(1,3));

    //substr():有两个参数
    //参数1:指定截取的起点
    //参数2:可选参数,指定截取的长度
    console.log(str.substr(3));
    console.log(str.substr(3,3,));

    //split() 把字符串分割为字符串数组(与join是反向操作)
    var s1='aa-bb-s-cc-dd';
    console.log(s1.split('-'));
    console.log(s1.split('s'));

结果显示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值