Javascritp入门
Javascritp入门
Javascript的基本介绍
JS是用于WEB开发的脚本语言,JS分为三个组成部分(ECMAScript/DOM/BOM)。
脚本语言是什么:
脚本语言往往不能独立使用,它和HTML/JSP/PHP/ASP.NET配合使用
脚本语言也有自己的变量,函数,控制语句(顺序,分支,循环)等
脚本语言实际上是解释性语言(即在执行时直接对源码进行执行),编译语言效率会更高一些
JS和java运行环境的区别:
Java程序.java→.class→jvm
js→浏览器(js引擎来解释执行),JS主要在客户端(浏览器)执行,很少在服务器执行,但并不代表不能在服务器执行。
JS的运行环境的注意点:
因为JS一般是在浏览器上运行,但是浏览器又有很多种,不同类型的浏览器可能对JS的支持不一样,所以才会有W3C规范这一标准。像FireFox,Chrome,IE等等都是遵循W3C的标准写的JS引擎,但是在某些地方可能和W3C标准还是有一定的区别。
JS快速入门
案例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><script language="javascript">function test(){window.alert("hello world!");}</script><title> New Document </title></head><body><input type="button" οnclick="test()" value="Button"/></body>
</html>
<html><head><!--js代码是放在head标签间,但实际上也可以放在别的位置--> <script language="javascript">window.alert("hello");</script></head><body></body>
</html>
小结:
js的位置可以随意放
js必须使用 <script language="javascript"> [代码]</script>,如果是引用外部JS文件,尽管中间没有代码,但是依旧要写成 <script></script>这种形式
在一个html文件中(JSP/PHP/ASP.NET)可以出现多对(script)片段,浏览器会按照先后顺序依次执行
JS变量类型
案例:
<html><head><title> New Document </title></head><body><!----js代码是放在head标签间,但实际上也可以放在别的位置--> <script language="javascript">//js中变量的定义(js中变量用var表示,无论什么类型,事实上连var也可以不写)因为js是解释型语言,所以其变量都是动态的,不需要特意指定变量类型var num1=1;var num2=60;var result=num1+num2;window.alert("结果是"+result); //alert函数 window.alert表示弹出一个对话框</script></body>
</html>
小结:
js是弱数据类型语言,即:在定义变量时候,统一使用var表示,甚至可以去掉var这个关键字
js中的变量的数据是由js引擎决定的
例:
var name=”zs”; //name是字符串
var kk=2; //kk是数字
name=234; //这时name自动变成数
JS命名规范
(1)可以使用大小写字母,数字,$来命名
(2)不能以数字打头
(3)不能使用js保留字和关键字
(4)js是大小写区分
(5)单行注释大小写://
(6)多行注释:/*…….*/
(7)命名建议使用驼峰法,变量、方法首单词小写之后单词首字母大写,类名所有单词首字母大写
JS数据类型
基本数据类型:
原始数据类型(均使用小写)
undefined、null、boolean、number、string
关于null类型:这是当初设计的一个错误,被沿用至今。null是一个基本数据类型,其类型为Object,起作用是充当占位符!
PS:undefined是null的子类,undefined表示未定义,也就是说这个东西不存在,你就要去使用它,nill表示空,表示这个东西存在,只不过它的类型是null。也就是未初始化和已初始化的区别。
1、数值类型
123、12.1等
特殊数值:1)NaN,表示非数值类型,2)Infinity表示无穷大
第一种
var a=”abc”;
window.alert(parseInt(a));
第二种
window.alert(6/0);
2、字符串类型
可以用单引号也可以用双引号,特殊字符可以用转义符号\转义
window.alert("asada\"r"); 输出asada”r
PS:Java中字符串只能用双引号
3、布尔类型
true false
补充:通过typeof运算符可以看到变量的具体数据类型,除了上述三种常用基本类型之外还有Undefined、Null。
案例:
<html><head><script language="javascript">var num1=123;var num2="abcd";window.alert("num1是"+typeof num1); window.alert("num2是"+typeof num2);var num1=false; //体现js是动态语言:即数据类型可以任意变化window.alert("num1是"+typeof num1); //体现js是动态语言</script></head><body></body>
</html>
复杂数据类型:
数组,对象。PS:后面会单独介绍
特殊数据类型:
Null,Undefined
JS数据类型转换
1、自动转换
例子:var a=123; //a是数值
a=”hello” //a的类型是string
2、强制转换
例子:var a="123” ;
a=parseInt(a); //使用系统函数强制转换
JS运算符
+加、-减、*乘、/除、%取余,++a前加一,a++后加一,--a减减一,a--后减一,+=加等于,-=减等于,*=乘等于,/=除等于,%=模等于,==相等,!=不等,===等同,!==不等同。等等
PS:运算符这段内容可以参考我的另一篇博客JAVA入门(1),JS和Java在这上面并没有什么太大的差别。
区别之一:
==(相等)和===(等同)的区别?
如果是==,那么他会自动尝试进行类型转换,也就是说==是比较值是否相等。
varstr="66";//string
varstr1=66;//number
alert(str==str1);//如果是两个等号,会自动尝试进行类型转换!返回结果为true
如果是===,那么它不会进行类型转换,返回false!也就是说===是比较值和类型是否相等。
注意事项:(JS和Java不同的地方)
1、在逻辑运算中:0,””,false,null,undefined,NaN均表示false,除了这些均表示为真。
2、在JS中,||究竟返回什么值,这是一个非常重要的知识点
结论:将返回第一个不为false的值(对象亦可),或者是返回最后一个值(如果全部都是false的话),返回的结果不一定是布尔值。
案例1:
var a=true;
var b=false;
window.alert(a||b);
输出true
案例2:
var a=4;
var b=90;
var c=a||b;
window.alert(c);
输出:4
案例3:
var a=0;
var b=90;
var c=a||b;
window.alert(c);
输出:90
案例4:
var a=0;
var b="";
var d=false;
var c=a||b||d;
window.alert(c);
输出:false 如果是var c=a||d||b;返回空串
JS的位运算和移位运算
按位与&、按位或|、按位异或^,按位取反~,算术右移>>,算术左移<<,逻辑右移>>>。
PS:JS和Java规范一样,具体细节可以参考我的另一篇博客Java入门(2)
JS控制语句
1、顺序控制
顺序控制就是使程序从上到下(没有方法的情况)一条一条的按顺序执行。
2、分支控制
2.1单分支
if(条件表达式){语句;}
2.2 双分支
if(条件表达式){语句;}else{语句;}
2.3多分支
if(条件表达式1){语句;}else if[多个](条件表达式2){语句;}else{//else可有可无语句;}
2.4 switch
基本语法:
switch(表达式){执行语句;case 类型1:break; //跳出整个switch[多个]default:语句;break;}
结论:
1、JS的switch语句的数据类型可以是JS支持的任何类型(对象和数组除外)。
2、case后面的值数据类型可以是任意的(对象和数组除外)。
3、break作用是跳出整个switch
4、如果没有匹配的则执行default
3、循环控制
for循环
while循环
do while循环
for in循环
for in循环的基本语法:
for(var a in 数组){语句;}
for in循环一般用于数组,不过就算是在数组中,也很少用for in 循环来进行遍历,一般都用for循环。
PS:前三个和Java一样,这里不再赘述,可以参考Java入门(1)。
JS函数
函数的基本概念:为完成某一个功能的代码(语句,指令)集合
基本语法:
function 函数名(参数列表){ 语句;//函数(方法)主体return 返回值; }
说明:
1.参数列表:表示函数的输入 特别强调:参数名前不要带var
2.函数主体:表示为了实现某一功能代码块
3.函数可以有返回值也可以没有返回值
案例:
<html><head><script language="javascript" type="text/javascript">//输入两个数,再输入一个运算符,得到结果var num1=window.prompt("请输入一个数");var num2=window.prompt("请再输入一个数");num1=parseFloat(num1);num2=parseFloat(num2);var operator=window.prompt("请输入一个运算符");var res=jiSuan(num1,num2,operator);document.write("结果是"+res);//自定义函数function jiSuan(num1,num2,operator){var res=0;if(operator=="+"){res=num1+num2;} else if(operator=="-") {res=num1-num2;} else if(operator=="*") {res=num1*num2;} else {res=num1/num2;}return res;}</script></head><body></body>
</html>
PS:函数可以分为自定义函数、系统函数,系统函数可以通过查文档使用。
函数的调用方式
1.普通调用
函数名(实际参数);
2.通过指向函数的变量去调用
var myvar=函数名;
myvar(实际参数);
案例:
JS文件:
function test(val){window.alert("你得输入是"+val);return 90;}
html调用:
test("hello,world"); //传统的调用方式window.alert(test); //显示函数var myvar=test; //将函数赋值给变量window.alert(myvar);//显示函数myvar("hello,world"); //显示hello,worldvar myvar=test("abc"); //输出abcwindow.alert(myvar); //输出90,如果函数没有返回值则返回undefined,如果有返回值,则返回什么就是什么
PS:这里有个细节问题,那就是将函数赋值给变量会出现什么样的情况。
如果是将函数名(不包括参数)赋值给变量,这时候就是该变量指向函数的地址,并且直接输出的话,会输出该函数,而不是该函数的地址。在变量后面加上参数,就能将参数传入该函数。
如果是将函数(包括参数)赋值个变量,这时候就是该变量就是该函数的返回值,如果函数没有返回值,则显示undefined,如果有返回值,则返回什么就是什么。
深入理解
1、js函数的参数列表可以是多个
2、js函数列表可以是多个,并且数据类型可以是任意类型
3、js支持参数个数可变的函数
4、js支持创建动态函数
5、js函数不可以重名
案例:
//编写一个函数,可以接收任意多个数,并计算他们的和function abc2(){//在JS中有一个 arguments可以访问所有传入的值//window.alert(arguments.length);//得到参数的个数//遍历所有的参数var sum=0;for(var i=0;i<arguments.length;i++){sum=arguments[i]+sum;}window.alert(sum);}
调用:abc2(12,12,12,12); 结果是48,abc2(); 结果是0
JS数组
一维数组
什么是数组?
数组可以存放多个数据,其在内存中的存放形式是顺序的,并且是在堆内存中。
PS:和Java不同的是,JS可以在同一个数组中,存放不同类型的元素,也就是说在同一个数组中可以同时存放数值型,字符串等。
基本语法:
var 数组名=[元素值,元素值…] //元素的值可以是任意类型var an=[1.23, ”hello”, true, 2];
案例:
<html><head><script language="javascript">var a = [1, 2, 3, 5, 7, 9, 5];var sumA = 0;for(var i = 0; i < a.length; i++){sumA += a[i];document.writeln(a[i] + " ");}document.writeln("<br/>");document.writeln(sumA);</script></head>
</html>
PS:JS数组和Java一样都是引用传递的。而引用传递和值传递的区别就是引用传递给函数,能修改其中的值,而值传递是不能的。
这个牵涉到堆栈知识,其原理就是调用函数和被调用函数在不同的栈里面,如果是值传递,那么在被调用函数中对值进行修改,只改变被调用栈中的值,而不会影响调用函数栈的值。如果是引用传递的话,那么在被调用函数中对值进行修改,因为其是引用指向堆中元素,事实上是修改了堆中元素的值,而调用函数也是指向堆中元素,所以调用函数的值被修改了。
数组引用
基本用法:
数组的名称[下标];
比如:var a=[23,”hello”,4.5]
我们访问a[2]则输出4.5
如果我们访问a[3]则输出undefined
结论:不能访问不存在的元素,数组的下标是从0开始编号的
数组遍历
可以使用循环控制语句while,do-while,for,for in来遍历。
小结:
1、数组可以存放任意类型的数据
2、数组大小可以不必事先指定,可以动态增长
3、数组名可以理解为指向数组首地址的引用
4、数组元素是从0开始编号的
5、JS和Java不同,不需要在类型后面加上[],而且其初始化用的括号是[]中括号,而不是{}大括号。
多维数组(以二维函数为例)
二维数组可以将每个元素都视作一个一维数组。
例子:var arr = [[“abc”,123,3.2],[“a”,”b”,”c”]];
二维数组遍历
var arr = [[“abc”,123,3.2],[“a”,”b”,”c”]];//两重for循环遍历for(var i = 0; i < arr.length; i++){for(var j = 0; j < arr[i].length; j++){document.writeln(arr[i][j] + “ ”);}document.writeln(“<br/>”);}
输出:
abc 123 4.5
a b c
排序,查找
排序,查找的内容可以参考我的另一篇博客Java入门(2),因为这是算法问题,只是在语言表达上有所不同,故不再赘述。
----------参考《韩顺平.轻松搞定网页设计(html+css+js)》
Javascritp入门相关推荐
- HTML,CSS,JavaScript学习笔记--导航
陆陆续续花了一个月的时间,把前端三大件HTML,CSS,JavaScript的基本语法学完了,感觉还是收益颇丰的.但是其中的知识远远不止这些,以后学习的过程中在进行补充吧. HTML,CSS学习笔记 ...
- 零基础AJAX入门(含Demo演示源文件)
零基础AJAX入门(含Demo演示源文件) 作者:一点一滴的Beer 个人主页:http://www.cnblogs.com/beer 摘要:因为笔者的大四毕业设计是做WebGIS系统,用过Web版 ...
- React一天入门笔记(一) | 基础知识点
React基础知识点 目标 能够说出React是什么 能够说出React的特点 能够掌握React的基本使用 能够使用React脚手架 什么是React (★★★) React是一个用于构建用户界面的 ...
- JavaScript基础教程——入门必看篇
JavaScript他是一种描述性语言,其实他并不难学,只要用心学,一定会学好,我相信大家在看这篇文章的时候,一定也学过HTML吧,使用JavaScript就是为了能和网页有更好的交互,下面切入主题. ...
- 用Construct 2制作入门小游戏~
今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...
- Docker入门六部曲——Swarm
原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...
- Docker入门六部曲——Stack
原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...
- Docker入门六部曲——服务
原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...
- 【springboot】入门
简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...
最新文章
- UnicodeDecodeError: 'utf8' codec can't decode byte 0xb1 in position 0: invalid start byte
- 计算机网络基础 单选题) 作业,南开大学《计算机网络基础》在线作业及答案
- android第三方应用,Android 第三方应用接入微信平台研究情况分享(一)
- 如何应对视觉深度学习存在的问题
- iOS即时通讯输入框随字数自适应高度
- linux 启动tomcat 怎么显示日志文件,随着LINUX的启动,打开一个终端显示TOMCAT的日志文件,请问如何做到?...
- 02HTML 超链接与图像标记各是什么,【HTML篇】3.HTML的图片标签、超链接标签
- 教你如何保持Tuxera NTFS For Mac软件的更新
- 计算点到SVM超平面的距离
- python turtle输出坐标_如何在Python/turtle中使用坐标列表绘制形状
- JDK 8和Java 8的下载与安装
- bada开发tips
- 【运筹学】整数规划 ( 整数规划求解方法 | 指派问题 )
- 坚果云和百度网盘的比较
- Python中 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape错误解决方法
- cad批量打印_CAD批量打印
- 浙江特大套路贷案具体经过是什么样?套路贷与普通贷款有什么区别
- 学姐写毕业论文,图表在PDF上,复制下来格式全乱,头疼了一晚,幸亏有我
- react package.json 里面的小尖角号和波折号各什么意思
- 可持续发展的“孤勇者”,亚马逊云科技并不孤单