JavaScript是⼀种弱类型脚本语⾔,都是使⽤ var 定义变量,在js中没有类的概念,只有对象,所以要掌握js的几大内置对象;
内部方式
head标签体中引入script标签
在1994年还没有JavaScript的时候,网络宽带只有7到10kb,这种网速下执行上面的操作是很费时的;
而之后,出现了一家公司:网景公司,开发了一款浏览器叫做领航者浏览器,这个浏览器植入了livescript,这个就是JavaScript的前身;
这个出现解决了如下问题:
由于公司的纷争,由livescript衍生出JavaScript(一般浏览器所用)和Jscript(微软IE浏览器所用), 但这两种其实基本差不多,它们的特性如下:
Js中分为两种编程模式:
BOM编程需要了解如下四个对象:
js引擎在解析html页面的时候,将html页面主要分为以下四个对象:
<html>
<head>
<meta charset="UTF-8">
<title>title>
<script>
var a = 10;
var a = 20;
document.write("a的值为:"+ a +" 数据类型为:"+typeof(a)+"
");
script>
head>
<body>
body>
html>
运行会在页面上输出:a的值为:20 数据类型为:number
js中数据类型的分类:
在Java中,可以进行类型的转换,比如将String类型转换为整数对应的就是:parseInt()这个方法;
同样的,在js中,也能实现类型的转换:
(js中还有一个parseFloat()方法)
<script>
var a = "100";
document.write("a的值为:"+ a +" 数据类型为:"+typeof(a)+"
");
var a = parseInt(a);
document.write("a的值为:"+ a +" 数据类型为:"+typeof(a)+"
");
</script>
页面输出:
a的值为:100 数据类型为:string
a的值为:100 数据类型为:number
与Java不同的是,如果a中除了数字外还有字母的话,Java会抛出异常,而js中,遇到非数值类型的字符串停止转换;
这个就无需多讲述了,加减乘除而已;
需要注意的是:
js中的for-in语句,类似于java中的增强for循环语句,目的是:
js中的for - in语句格式为:
for(var 变量名 in 数组对象/自定义对象){
输出这个变量即可;
}
可以看到可以是数组对象或者自定义的对象;
下面看一个实操代码:
<html>
<head>
<meta charset="UTF-8">
<title>js之for-in语句title>
<script>
//js中数组--->Array
var arr = [10,20,30,40] ;
//普通for循环的方式
for(var i = 0 ; i < arr.length ; i ++){
document.write(arr[i]+" ")
}
//打印一条分割线
document.write("
") ;
//用for -in语句来实现遍历
for(var i in arr){
document.write(arr[i]+" ");
}
document.write("
") ;
//自定义一个Person对象,注意js中方法的形参不能带类型,否则报错;⭐⭐
function Person(name,age){//this代表当前对象的地址在引用
this.name =name ;
this.age = age ;
}
//创建一个对象
var p = new Person("Bob",20) ;
//将Person对象的属性遍历出来:for-in :对象名[变量]
for(var i in p){
//输出对象的属性
document.write(p[i]+"
") ;
}
script>
head>
<body>
body>
html>
网页输出:
10 20 30 40
10 20 30 40
Bob
20
所谓js内置对象就是js中提供的一些已有对象,它们包含大量的方法来供我们操作;
作用就是:获取系统时间年份/月份/时分秒
在Java中,获取系统时间需要使用Date类;具体操作如下:
在js中,获取系统时间的具体操作为:
<script>
var data = new Date();
document.write(data);
</script>
页面输出:
Wed Nov 13 2019 12:06:00 GMT+0800 (中国标准时间)
但这个格式不是我们想要的格式,这时就需要用到Date对象的一些内置方法;
<script>
var data = new Date();
document.write(data.getFullYear() + "年");
document.write(data.getMonth() + "月");
document.write(data.getDay() + "日");
</script>
输出:
2019年10月3日
类似还有获取时分秒的方法,这里就不再详述;
要实现网页时钟,我们需要如下步骤:
具体完整代码如下:
<html>
<head>
<meta charset="UTF-8">
<title>网页时钟title>
<script>
function genDate(){
//1. 创建date对象
var date = new Date() ;
//2. 拼接时间字符串
var dateStr = date.getFullYear()+"-"+(date.getMonth()+1)+"-"
+date.getDate()+" "+date.getHours()+"-"+date.getMinutes()+"-"+
date.getSeconds() ;
//3. 获取span标签对象
var spanTip = document.getElementById("span_tip") ;
//4. 设置span标签对象的innerHTML属性
spanTip.innerHTML = dateStr ;
}
//定时器:网页定时器
/**
* window.setTimeout("任务()",毫秒) ;//经过多少毫秒后执行一次任务
* window.setInterval("任务()",毫秒);//每经过多少毫秒重复执行任务
*/
window.setInterval("genDate()",1000) ;
script>
head>
<body>
当前系统时间是:<span id="span_tip">span>
body>
html>
网页输出会输出对应时间,而且每秒更新一次;
js中数组的特点:
三种定义方式:
arrayObj = new Array(); ————不指定数组长度
<script>
var arr = new Array();
arr[0] = 1;
arr[1] = false;
arr[2] = "hello";
alert(arr.length);
for(var i=0; i<arr.length; i++) {
document.write(arr[i]+"
");
}
</script>
> **网页输出:**
> 先弹出一个提示框,内容为:3
> 然后输出那三个内容;
arrayObj = new Array([size]) ————指定数组长度
arrayObj = new Array([element0[, element1[…]]]); ————最常用⭐
<script>
var arr = [1,"hello",false,new Object()];
for(var i=0; i<arr.length; i++) {
document.write(arr[i]+"
");
}
</script>
> **输出:**
> 1
> hello
> false
> [object Object]
join()函数:拼接字符串;
<script>
var arr = ["php","C++", "java", "python"];
var str = arr.join("、");
document.write(str);
</script>
输出:
php、C++、java、python
reverse()函数:反转数组中的元素;
js中还有一些其他的内置对象:如Math、
作用是:为内置对象追加自己定义的方法;
(此时就需要使用js的原型属性来解决这个问题,注意:更改源码也不能追加自己的方法哟)
追加的格式为:
内置对象.prototype.追加方法名 = function() {}
下面看个栗子:
<script>
var arr =[1,2,3];
//为所有的Array对象追加searchIndex这个方法;
Array.prototype.searchIndex = function(target) {
for(var i=0; i<this.length; i++) {
if(this[i] == target) {
return i;
}
}
return -1;
}
var index = arr.searchIndex(3);
document.write(index);
</script>
网页输出:
2
自定义对象有四种定义方式,分别如下;
分两个步骤:
(1)定义对象:function 对象(属性){...}
(2)创建对象:var 对象名 = new 对象(实际参数);
具体案例:
<script>
function Person(name, age) {
//追加属性
this.name = name;
this.age = age;
//追加方法
this.print = function() {
document.write(name + "  " + age);
}
}
//创建对象
var per = new Person("yy", 20);
//调用对象方法
per.print();
</script>
输出:
yy 20
<script>
function Person() {
}
var p = new Person();
//追加属性
p.name = "李四";
p.age = 20;
//追加方法
p.print = function() {
document.write(p.name + "  " + p.age);
}
p.print();
</script>
输出:
李四 20
<script>
//直接将Object对象看成你想要的任意对象,之后你追加属性和方法即可;
var p = new Object();
//追加属性
p.name = "李四";
p.age = 20;
//追加方法
p.print = function() {
document.write(p.name + "  " + p.age);
}
p.print();
</script>
输出:
李四 20
json的格式为: ({}内的东西就叫json对象)
{"key" : value(Object)}
简单的格式:(简单或复杂都是由基本格式而来)
{"name":"张三", "age":20, "password":"123456"}
复杂的格式(json里面嵌套json):
{"key":{
"key":value
}
}
具体使用:
<script>
var p = {
"name" : "YY",
"age" : 20,
"print" : function() {
document.write(p.name + "  " + p.age);
}
};
p.print();
</script>
网页输出:
YY 20
json的使用解决了前后端交互的一些问题,例如后台给前端返回List/Map这类集合数据的时候,前端是无法直接处理的;我们应该将List/Map转化为json对象再传给前端;
在js中,定义函数的格式为:
function 函数名(形式参数列表) {
具体业务;
}
注意点:
(1):形式参数中不能加上数据类型(var),否则报错;
<script>
function add(var a, var b) {
var s = a+b;
document.write(s);
}
add(10,30);
</script>
运行上面后将会报错;
(2):在js中,不存在方法重载的概念,后面同名的函数将会覆盖前面的函数;
(3):在js中,不需要写返回值,但可以有return语句;
(4):无论形式参数个数大于还是小于实际参数,函数都会被调用;
(5):函数中默认存在一个数组:arguments,作用是:将函数中实参和形参一一绑定;
js中,函数的调用分为单独调用和赋值调用:
单独调用:即直接调用函数;(如 add(10,30); )
赋值调用:把函数调用的结果赋值给一个变量;
<script>
function add(a, b) {
var s = a+b;
return s;
}
var res = add(10,30);
document.write(res);
</script>