多态的本质是:让用户不知道引用实际上是什么类型,也能调用里面的方法,让封装更进一步,降低了用户的使用成本;

举例子:

1)集合类:

List<String> list=new ArrayList<>();

2)多线程:显示继承Thread类,重写Runnable,都要提供run方法,JVM内部调用父类的run方法,执行到我们自己用户执行的run方法

3)DataSource,向下转型

1 基础语法(和Java类似)

一:我们都知道,java的运行,主要是靠JVM,JVM把.class文件(二进制字节码文件)加载到内存中,然后再来解析运行,然后再把java的字节码转化成CPU指令,是直接进行查找文件;

但是对于JavaScript来说,是浏览器先要加载HTML,HTML通过一些方式引入JS,JS的代码大多数是通过网络的方式被下载到浏览器上面,然后浏览器在调用V8引擎来解释执行JS的代码(由V8引擎把JS翻译成二进制的机器指令,然后再进行运行)

DOM:浏览器提供了一组API,让JS可以操作网页中的元素;

BOM:浏览器提供了一组API,让JS来操作浏览器的窗口(比如说刷新页面);

JS不区分字符和字符串,像onclick这样的属性,本质上是用来触发一个点击事件;当用户点击这个元素,就会触发一个点击事件,我们通过onclick就可以能够捕获这个点击事件,进一步的就触发了这里面的JS代码;

二: JS程序的写法:

1)行内式:直接嵌入到html元素的内部

<input type="button" value="你点我一下" onclick='alert("HelloWorld")'>
像onclick这样的属性,是可以嵌入一段JS的,它的功能是获取点击事件,当用户点击这个元素时,就会触发这个点击事件,进一步就触发了JS的代码;<div onclick='alert("你还真点呀")'>点我一下</div>

2) 内嵌式:直接写到script标签中

   alert("helloworld");//相当于java中的System.out.println

3 外部式:单独把他写到一个JS文件中

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

把JS写到一个单独的文件中,由HTML来进行引入,这个操作往往会触发一个网络请求,网络就会根据当前src的路径来到服务器上面进行获取这个指定的文件,当加载了这个JS之后,就会立即执行

当script标签里面有了src这个属性,我们就不可以在script标签里面写具体的执行代码,写了也不会生效

如果一个页面中包含了多个script标签,就会按照script标签出现的先后顺序来进行决定执行顺序;

JS的输出语句:1)alert(),它的作用是弹出一个对话框,直接在网页上输出结果;

2)console.log(),在控制台里面打印一个日志,这是给程序员来看的

相比之下,web程序有很多天然的优势,客户端不需要进行更新,只要你的服务器部署了新的代码,每一次浏览器启动之后,都会自动地进行加载新的代码

三:变量的使用:

输入:这时会弹出两个输入框

let a=prompt("请输入你的姓名");
alert(a);

1)创建变量:他是不需要指定显示类型的,在JS中,有用的数据类型只有两种,数字类型和字符串类型,而这两种类型的声明,都是用var/let来声明的,在JS中,可以用typeof来查看数据类型;

一个函数参数的类型也是动态的(传参的时候不需要考虑是啥类型),函数参数的返回值也是可以自己随意执行的;

   var a=3;//表明a是一个整数变量console.log(a)console.log(typeof(a));a="abcde";//表名a是一个字符串console.log(a)console.log(typeof(a))
我们把变量赋值给数字,那么这个类型就是数字类型;我们把这个变量赋值给字符串,那么这个类型就是字符串类型

同时也可以这么写

let a=10;console.log(a);console.log(typeof(a));a="a";console.log(a);console.log(typeof(a)

java是一个静态类型的语言,一个变量的类型,在编译阶段就已经确定了,运行时是不可以改变的,但是在JS中,他是一个动态类型的语言,变量的类型是在运行时可以进行改变的,变量的值和赋值的类型密切相关;

四:基本的数据类型:number:数字,不区分小数和整数,例如console.log(1/2)打印出来的值是0.5(数字类型包括小数和分数);

boolean类型:只有true和false两种类型

 var a=true;console.log(typeof(a));
这个代码打印出来的值是boolean

undefined:他只有唯一的值,表示从来没有被定义过的值,也就是说没有被初始化过;undefined与字符串进行相加,得到的是和字符串拼接的结果;当他与数字进行相加得到的结果是NaN;表示的是一个非法的状态,最典型的用法,就是访问JS中某个对象的属性,但是这个属性又不存在

在JS中他是可以支持字符串和数字之间的拼接的,会自动地把数字转化成字符串的

null:只有唯一的值表示空值,是一个已经定义的值;他们俩都表示非法的概念,用typeof(null),结果是Object类型;

string:表示字符串类型,可以用length来求长度,表示字符的长度;

NaN:表示不是一个整数

alert("hello"-10);此时打印出来的值就是NaN
let a=b||0;
如果b的值是非空,那么就把a的值设成b,如果b的值为空(null/undefined),就把a的值设成0

在while循环中,如果条件是true,就执行循环体里面的代码 ;

parselnt是把字符串转化成整数

在JS中a||b表示如果a为true那么表达式的值就是a的值,如果a为false那么表达式的值就是b的值

使用==的时候是不会考虑类型的,如果想要考虑类型,就要用===来表示

let a=10;
let b="10";
console.log(a==b);这时打印的结果是true,==不考虑具体类型,会尽量进行类型转换
console.log(a===b);这是打印的结果是false
let a=true;//true表示0,false表示1
let b=a+1;//a=2
//if语句0表示假,非0表示真

——————————————————————————————————————————

2 数组

一:数组的创建方式

在Java或者C中,要求数组中的每一个元素必须是相同类型的,但是在动态类型的语言中,是不会做要求的;

1 通过new关键字来创建

let arr1=new Array();
arr1[0]=1;
arr1[1]="hello";
arr1[2]="world";
arr1[3]="hi";
arr1[4]=2;
console.log(arr1);
此时数组的长度不知道,数组里面的元素类型都可以是任意的
let array=[];

2 通过[]来指定

let arr1=[1,2,"hello","world"];
console.log(arr1);
直接在console来指定一个数组名,就可以打印一个数组了
这是我们如果写arr1[10]="name"也是可以的
如果尝试写入数组不存在的下标,就会在这个下标里面添加元素,同时可能会修改数组的长度;但是中间元素的值,仍然是undefined
var arr1=[1,2,"helloworld"];
arr1[10]="var";
console.log(arr1.length);
此时打印的值就是11

我们可以超出数组范围来写元素,但是如果超出范围来读元素,读出的结果任然是undefined;

var arr1=[1,2,3,4,5,6,7];
arr1="hello";
一开始的时候arr1是一个数组,但是后来arr1被转化成字符串了

甚至我们可以给数组指定一个字符串类型的下标,此处下标与数组下表对应元素的关系,相当于是一个键值对,JS的数组本质上是一个对象,对象是可以在运行过程中可以进行动态的新增或者删除属性的,我们可以通过[]或者.都是可以的

let arr1=new Array();
arr1["hello"]="world";//本质上是创建一个hello属性
console.log(arr1["hello"]);
console.log(arr1);
console.log(arr1.hello);
arr1.hello=123;
console.log(arr1.hello);

显示的结果为:

注意: 数组里面的元素可以要求是不同类型的元素,如果数组下标越界,读取的数据就是undefined,写入的数据就相当于对数组进行了扩容;数组的下标不一定非得是数字,还可以是字符串,相当于动态的给数组对象添加了一些属性

二:数组中的常见操作

1)给数组里面追加元素

let arr1=new Array();
for(var i=0;i<10;i++)
{arr1.push(i);
}
console.log(arr1);

2)删除元素arr1.splice(a,b);第一个参数表示数组要进行开始删除的元素位置,第二个参数表示总共要删除的数组元素个数;

var arr1=[1,2,3,4,5];
arr1.splice(2,2);
console.log(arr1);
打印的结果是1,2,5

3 函数:

函数(function)就是方法(method),方法就是函数,function指的就是一个独立的函数,但是method指的是某一个类,某一个对象的成员函数

传参是传什么类型都是可以的,只要可以支撑传过来的参数的运算(函数体里面的逻辑),不需要支撑泛型这样的语法

1语法格式:

function 函数名 参数列表()
{   函数体return 返回值;
}
function hello(){console.log("hello");
}
hello();
function add(a,b)
{return a+b;
}
console.log(add("hello","world"));
console.log(add(5,3));
打印出来的值是helloworld,8

Js对于形参和实参的要求不需要指定类型,也不需要指定个数;对于参数个数来说

1 如果实参个数比形参个数多,那多出来的个数不参与函数运算

2 如果实参个数比形参个数少,那么此时多出来的值为undefined

function add(x,y){return x+y;}
console.log(add(10));
console.log(add(10,20));
console.log(add(10,20,30));
此时打印的值是NaN,30,30
<script>function add(a,b,c,d){a=a||0;b=b||0;c=c||0;d=d||0;return a+b+c+d;}console.log(add(10));console.log(add(10,20));console.log(add(10,20,30));console.log(add(10,20,30,40));</script>
最终的打印结果就是10,30,60,100

还可以这么写:函数表达式:定义一个函数,然后再把这个函数赋值给一个变量

var add=function(a,b,c,d){return a+b+c+d;
}
console.log(add(10,20));
console.log(add(1,2,3,4));
console.log(typeof add);
打印结果是NaN和10这是我们定义了一个一个匿名,没有函数名的函数,把这个函数赋值给了另一个变量
那么就可以拿着这个变量来进行函数调用了
不定义函数名的函数叫做匿名函数let add=function(a,b,c,d){//这里面的函数时可以不用写的return a+b+c+d;}console.log(add(10,20,30,40,50));console.log(add(10,20,30,40));console.log(add(10,20,30));console.log(add(10,20));console.log(add(10));这个代码的打印结果是100,100,NaN,NaN,NaN
 for(var i=0;i<10;i++){}console.log(i);
把var设置成let,就不可以在循环外边进行访问了

作用域链:函数是可以定义在函数内部的,内层函数时可以访问外层函数的局部变量的;

var num=1;function test1(){var num=10;function test2(){var num=20;console.log(num);}test2();}test1();
总而言之,JS中某一个函数中尝试使用的变量就会沿着这个函数定义的嵌套关系,逐渐向上找,一直找到最顶层的全局作用栈
这里面最终的打印结果是20,执行test2中的console.log()的时候,会先在test2中的局部作用域去查找num,如果没有找到,就继续向test1中去找,如果还没有找到,就去全局作用域去找;

4)对象(当前对象的格式和JSON是很像的)

从ES6开始,也引入了class,也引入了继承,也有了构造方法,对象里面的属性是可以使用.来进行访问问的;也可以通过[]的形式来进行访问,注意以数组下标的形式来进行访问要加上''符号来进行访问

在JS中,类这个概念是很模糊的

1 通过字面量来创建对象

  var a={};//这表示创建一个空的对象var student={name: "李佳伟",height:175,weight:208,sayhello:function(){console.log("hello");}};
这就创建了一个对象let teacher={name:"刘树军",age:19,sayhello:function(){console.log("world");}}let student1=student;console.log(student1.name);console.log(student1.height);student1.sayhello();student1=teacher;console.log(student1.name);student1.sayhello();
console.log(student1==teacher)//true
console.log(student1.name);console.log(student1['name']); 

注意: 我们是通过{}来创建对象的,对象里面的成员属性和方法要用键值对的形式来组织;

其次,键值对之间要用:来分割;键和值之间使用,来分割;

方法的值是一个匿名函数;当调用函数的时候,不要忘了写上小括号;

一个对象可以有任意个这样的属性,况且可以运行时动态新增

2 通过new Object()来创建对象:JS中的对象,都是Object类型

  var student=new Object();student.name="郭宇泽";
//如果当前student类中不包含name属性,那么就会新创建出name属性;如果说包含name属性,就会修改原来的name属性的值student.height=178;student.weight=200;student.sayhello=function(){console.log("hello");}console.log(student.name);student.sayhello();
这时我们就可以说,一个这样的对象有若干个这样的属性,并且可以进行动态新增

3 通过构造函数来创建对象:如果说想要创建出多个类似的对象出来,刚才的方式就有一点麻烦,因为刚才的对象中都有height,age,name属性

基本语法:
function 构造函数名(形参){this.属性=值;this.方法=function....
}
var s1=new 构造方法名(实参);
形如这样的函数就叫做构造函数

注意:在构造函数时内部要写上this关键字来表示当前正在构建的对象,构造函数不需要return,创建对象的时候必须使用new关键字;

在JS底层仍然是通过构造方法的方式来进行创建实例的

new 关键字的执行过程:1 现在内存中开辟一个空的对象;

2 this 指向刚才的空对象;

3 执行构造函数的代码,给对象创建对应的属性和方法

4 返回这个对象,本身不需要return,new代替了;

 function cat(name,age){
this.name=name;//属性
this.gae=age;
this.hello=function(){console.log("我要对你说hello")
}//创建构造方法,创建出一个构造方法,主要是为了构建对象
}
//上面的内容类似于Java中类的定义,此处是通过函数来进行凑活一下的;
//下面相当于创建了一个又一个的对象
let cat1=new cat("中华田园猫",20);
let cat2=new cat("波斯猫",19);
console.log(cat1.name+cat2.name+"正在一起玩");

Javascript(前端知识)----------基础语法相关推荐

  1. JavaScript脚本语⾔基础语法笔记总结

    JavaScript脚本语⾔&基础语法&笔记总结 0.学前准备: JavaScript简介使⽤⽅法 1. JavaScript简介 什么是JavaScript? 前端Web技术的组成: ...

  2. Javascript核心技术的基础语法

    Javascript核心技术的基础语法 一.什么是javascript Javascript是基于对象和事件驱动的脚本语言,主要是嵌入到HTML中,应用在客户端,动态操作网页元素,也可以作用于服务端. ...

  3. JavaScript进阶篇①——基础语法

    一.认识JS 你知道吗,Web前端开发师需要掌握什么技术?也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HTML+CSS创建一个漂亮的页面,但这还不够,它只是静态页面 ...

  4. 前端知识基础之Vue知识点串讲

    一.Vue知识点串讲 复习一下Vue中的核心知识点. 复习完基本的知识点以后,后面再来看一下其它的面试内容 1.基本使用 下面,先来看一段最简单的代码,如下所示: <!DOCTYPE html& ...

  5. HTML知识基础语法篇(8)

    HTML基础知识 第八篇 主体内部标签 30∼34 脚本链接 语法: <a href="JavaScript:-">文字链接</a> 在JavaScript ...

  6. 前端——Vue基础语法

    Vue介绍 Vue是一套构建用户界面的渐进式前端框架. 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合. 通过尽可能简单的API来实现响应数据的绑定和组合的视图组件. 特点 易用 ...

  7. java基础知识——基础语法

    java的基本语法格式 [修饰符] class 类名{程序代码 } 方法的定义 一般情况下,定义一个方法包含以下语法: 修饰符 返回值类型 方法名(参数类型 参数名){...方法体...return ...

  8. 【JavaScript 笔记 】— 基础语法(数据类型、字符串、数组、对象、Map、Set、iterable、函数基础)

    JavaScript个人笔记 数据类型和变量 浮点数的相等比较 null 和 undefined == 与 === strict模式 字符串 模板字符串 字符串常用方法 数组 数组常用方法 对象 条件 ...

  9. javascript入门及基础语法结构

    1.什么是变量? 如何声明变量?变量名的命名规则 变量: 可变的量 var 变量名=变量值; 变量的组成: (1)字母 _ $ 不能以数字开头 ,(2)变量名不能是JavaScript关键字和保留字开 ...

最新文章

  1. 当谷歌员工来到新公司的那一天,发现原来公司什么都没有
  2. python 子图_python 实现在一张图中绘制一个小的子图方法
  3. python常用标准库有哪些-Python - 常用标准库
  4. 《研磨设计模式》chap21 解释器模式Interpreter(2)parse模型
  5. ethz研究生申请官网
  6. BitMapData知识 转
  7. 用于连接mysql的java类_【考试】列举Java连接数据库用到的类有哪些。
  8. ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
  9. 使用git管理自己的代码--简单使用流程
  10. 有一列数列,1,11,21,1211,111221,.........,
  11. python切片长度_python的间隔切片技巧
  12. OSChina 周二乱弹 —— 从此鲜肉成屌丝
  13. 华为/华三:OSPF多区域配置
  14. 电脑内录软件如何录制电脑系统在线声音?
  15. 设计模式java 模板模式_设计模式-模板模式 JAVA实现
  16. 国际C语言混乱代码大赛(IOCCC)1988年获奖作品
  17. 项目管理工具和技术——PERT图和甘特图
  18. 设置计算机开机密码的步骤,电脑设置开机密码的方法
  19. 苹果手机还原网络设置会怎样_苹果手机老是信号不好,只要掌握这4个小技巧,信号便能立马增强...
  20. STM32硬件I2C与软件模拟I2C超详解

热门文章

  1. 笔记 ngrok 内网穿透及其身份认证 authtoken 配置
  2. 西门子PLC控制康耐视COGNEX相机拍照检测注意点
  3. ApacheCN《Sklearn 与 TensorFlow 机器学习实用指南》 第11章 项目训练深层神经网络(梯度消失与梯度爆炸,选择初始化,选择激活函数)
  4. STP基础(锐捷、H3C交换机开启STP)
  5. 大蟒蛇python头像_程序员用Python获取了自己以前的QQ历史头像,以前的非主流形象简直不忍直视...
  6. 520情人节送女朋友的3D相册礼物~html+css+js实现抖音炫酷樱花3D相册(含音乐)
  7. python爬虫翻页代码 豆瓣_Python爬虫 豆瓣动态页面的爬取
  8. smartart连续块状流程图_只须四步让你的流程图更美
  9. ​如何恢复回收站清空的文件?
  10. 分段二次插值例题_分段低次插值克服了高次插值多项式可能产生震荡的不足,但分段低次插值函数在整个插值区间上不能保证...