JS基础:基本语法

421 阅读12分钟

1、Javascript基本介绍与发展趋势

JavaScript能用来做什么?

 页面分为:结构、样式、行为。而js的作用就是对页面进行渲染,让页面具有交互行为

JavaScript的历史?

 JavaScript在设计之初只是为了做表单验证。但是现如今,JavaScript已经成为了一门功能全面的编程语言,已经是WEB中不可缺少的一部分,如今的JavaScript是一门既简单又复杂的语言,说它简单是因为可能一小时就能学会,但是如果你要真正掌握它,可能就得需要个几年的时间了。
NetScape公司在1995年着手开发了一种名为liveScript的脚本语言,为了营销目的,搭上当时媒体热炒的Java的顺风车,临时更名为JavaScript。其实,JavaScript和Java没有一点关系。JavaScript1.0获得了巨大的成功。
NetScape公司趁热打铁继续发布了JavaScript1.1版本,使得Web获得更高的关注,同时奠定了自己在浏览器届的霸主地位。

如果事情一直这样下去,那么NetScape可能依然是我们现代浏览器的霸主,可是在1996年互联网巨头微软公司进入浏览器领域,推出JScript,和NetScript公司开始争夺博主地位。

最让人担心的问题也因此出现,当时的JavaScript和JScript是完全不同的两个版本,这个方向的语言没有一个标准存在,业内的吐槽日益严重。终于,多方联合共同制定了一个标准,这个标准就是ECMAScript,ECMAScript做为JavaScript实现的基础。虽然制定标准之花费了几个月,但是这几个月却对未来20年的JavaScript发展起到的决定性的作用。

此时经过NetScape和微软的争夺,各大互联网厂商都发现了浏览器这块巨大的蛋糕,于是一场激烈的厮杀就开始了......

第一次浏览器世界大战:


最终的结果是微软的ie获胜


但是NetScape并没有放弃,在1998年公开源码,并重新命名为Mozilla,并重写所有程序,在2002年发布了第一个浏览器版本FireFox登场,在2004年开始叫板IE浏览器,IE推出IE7与之抗衡,拉开了第二次浏览器大战的序幕。

第二次浏览器世界大战:


而这次胜出的却是用户



JavaScript的组成:

ECMAScript、BOM、DOM

 ECMAScript是一个标准,它规定了语法、类型、语句、关键字、保留子、操作符、对象。(相当于法律)


BOM(浏览器对象模型):可以访问浏览器窗口的浏览器对象模型,对浏览器窗口进行操作。


DOM(文档对象类型):DOM把整个页面映射成一个多层节点结构。HTML页面组成都是某种类型的节点,这些节点又包含着不同类型的数据


2、Javascript和HTML5的关系

HTML5是一种新的技术,就目前而言,我们所知的HTML5都是一些标签,但是有了JS之后,这些标签深层的扩展功能才得以实现。

比如video标签,我们对其理解为一个简单的标签,但实际上,video标签还有更深层次的扩展功能。

3、如何编写及运行JS

 JS也是一种脚本语言,他可以有两种方式在HTML页面进行引入,一种是外联,一种是内部

外联JS的写法为:

<script src="相对路径"></script>
这是一条html语句,原则上可以放在html页面的任意位置,不用和link标签一样非得放在head部分
相对路径链接的是JavaScript文件,文件的扩展名为.js,如index.js

内部JS的写法为:

<script> //在script标签内写js脚本 </script>

错误的写法:

<script src="相对路径"> //在script标签内写js脚本 </script>
向页面中打印内容:
document.write(“这是一些文本内容”);

可以直接解析标签:
document.write(“<strong>加粗的内容</strong>”);

转义字符:

&lt;  ====  <        
&gt;  ====  >       
document.write(“&lt;strong&gt;这是一些加粗的内容</strong>”);

console.log("hello world")
向浏览器的控制台打印信息,跟document.write()原理类似

4、变量的概念及基本运算


他叫汤姆,他是一只猫。
猫由什么组成?猫皮,猫肉,猫爪,比起吃老鼠更愿意玩老鼠的心,每次整老鼠反而被整的笨脑子。
它的主人每次叫它什么?那个批了张猫皮,长着猫肉,有猫爪.....的什么玩意,你过来一下...
不!我们叫它汤姆!这是这只猫的名字!
在计算机中,我们把这只猫塞进一个汤姆的名字内。这个“汤姆”,就是一个变量。

如何创建一个变量?

var tom = “猫”;    
var a = “<strong>加粗的内容</strong>”;
var是一个关键字,用来声明一个变量;
表示赋值(取名字);

声明变量以“=”为区分,左边为变量名(被赋值),右边为存放进变量中的内容(给变量赋值)。

注意:JS中的“=”号,和数学中的“=”不一样,在JS中“=”的作用是赋值(取名字)

var 声明变量的底层原理:我们所写的程序运行在内存中,当我们使用关键字var 声明一个变量的时候,计算机会从内存中划分一个空间,为我们存放不用类型的内容做准备。

变量的类型(数据类型)

因为存放在变量中的数据是放在计算机的内存中的,计算机只识别0和1,所以需要对不同类型的数据进行转义,转义的结果会导致所需空间不同,所以JS中分成很多种数据类型,以便计算机储存时使用。

数字类型(number):1234567890   
字符类型(string):"123"  'asd'  "文字"   
                    "数据"(被单引号或双引号,包裹的部分,引号必须配套使用)    
未定义类型(undefined):这是一种特殊类型,当变量被声明,但是没有被赋值的时候,
                        那么该变量的类型的undefined    
布尔值类型(boolean):truefalse  (真,假)       
对象类型(object):{}object    
数组类型(array):[]

如何区分或得知不同的数据类型:

通过关键字 typeof 变量名

小技巧:声明一串变量时可以这么写,

var a=1,b=2,c=3;
(但是不推荐初学者这么用,因为这样的声明方式会导致注释不明确)

5、变量命名规则和关键字的介绍

变量的名字 就像 人的名字一样,不能乱起。
你的代码不是只有你一个人看,变量既然是名字,那就这个名字就要有特殊的意义:
举个栗子:翠花,我们能从这个名字中得到什么信息?(这个名字应该是个女的,父母应该希望她长得跟花一样,一个美好的愿景)
小钢炮?
我们能从名字中读出很多含义,是因为我们的语言常识,同样,变量也有一套类似的常识标准,代表了各种含义,如下:



第一个规则:

前缀就能表示出这个变量的类型

第二个规则:

开头必须为字母或者$或者_
那么能不能使用typeof做为变量名呢?想都别想!

第三个规则:

关键字和保留字不能用做变量名。

关键字:

以下这些关键字用于执行特定操作等。按照规则,关键字也是语言保留的,不能用做标识符


保留字:

未来可能做为关键字的存在



alert()方法

alert()方法用来停止浏览器加载代码,并弹出()里面的内容。
浏览器解析代码的顺序(从上到下,从左到右)

6、算术、赋值、关系运算符

JS中的运算符分为:算术/赋值/关系/逻辑/字符串

算术运算符: +加法 -减法 *乘法 /除法 %取余

var a = 1, b = 2;        
a + b = 3        
a - b = -1        
a * b = 2        
a / b = 0.5        
a % b = 1

目测,跟数学中的运算符是一样的。但是:

var a = "1", b = "2";        
a * b = 2        
a / b = 0.5        
a - b = -1        
a + b = ???

+号,有两层意思,第一层算数之间的加法;第二层字符串的连接;执行过程中,先检测加号两边的数据类型,如果发现字符型,那就先 生效字符的连接
数据类型转换:强制转换、隐式转换

其实还是有点不一样:和我们概念中的逻辑运算符很多都是不一样的:
比如: 

=    ==    ===

并且不同数据类型之间的运算得到的结果,可能不是我们意想中的;
有什么差别呢?
赋值运算符:

  =    +=    -+    *=    /+    %=

  


关系运算符: 

<    <=    >     >=    ==    !=    ===


6,变量不同类型之间的自动、手动类型转换

 转换成字符型:toString()

var str = 123;        
str.toString();//转换成字符串        
//将str从数值型变成字符型

浮点数:

电脑在运算过程中以正确的二进制浮点进行运算,但是我们输入的都是十进制的数,这两者并不是总是能转化的那么准确,有时候会得到正确的结果,但有时候就没那么幸运。

alert(0.7+0.1);???        
alert(0.6+0.2);???

var a=3,b="10",
c=true;        
alert(a+b);        
alert(b+c);        
alert(a+c);
运算结果好像并不是我们想要的。
我们想做数学运算的时候,应该先对所有的数据类型进行统一(统一成数字格式),这个时候我们就该用到数据类型的转换。

转换成数值:

parseInt();转换成整数,可以接受两个值
parseFloat();转换成浮点数

两者的不同:

parseInt();该方法从左向右,检测数字或字符串,当第一次发现一个不为数字的字符时,把之前的所有进行返回,如果字符串中第一个就不是数字,那么返回NaN
例如:parseInt("123abc");a做为第一个不是数字的字符;返回a之前的所有值,则该方法返回123
parseInt("abc123");a做为第一个不是数字的字符,且处在字符串的第一位,则判定该字符串无法转换为数字返回NaN

parseFloat();该方法检索数字或字符串后面第一个.后的不为数字的字符,并对之前所有的结果进行返回,
如果第一个字符不为数字,那么返回NaN        
例如:parseFloat(“123.456");返回123.456            
 parseFloat(“123.4a56");返回123.4             
parseFloat(“123.00");返回123             
parseFloat(“123.0a56");返回123
想想为什么?

关于浮点数:

Math.round()四舍五入取整浮点数。

认识NaN

它是一种特殊的Number类型,代表意外转换的数字,NaN和任何东西都不相等,包括它自己。

var num = 123.4567;    
num.toFixed(n);  保留n位小数

7,逻辑运算

 一门计算机语言,编程的核心在于逻辑思想,当我们在编写程序的时候,逻辑是否通顺,是能否写出程序的关键,可以说如果掌握了逻辑,那么你就踏入的计算机编程的大门。

逻辑运算符: &&  ||  !


字符串连接运算符: +

8,自增自减运算

 ++        --

a++表示在a原有的基础上增加1   
 a--表示在a原有的基础上减小1    
那么,++a  和  --a  呢?    
var a = 1;    
alert(a);    
var b = 1;    
alert(b++);        
alert(b);    
var c = 1;    
alert(++c);

前自增与后自增有本质的区别,他们相同点都是为自身加了1,不同点是
前自增是先加1,再使用操作数的值
后自增是先使用操作数的值,再加1

前自减和后自减同上。

9,NaN的概念和应用

NaN

(not a number:不是一个数字的数值),是一种特殊的Number类型,代表意外转换的数字,NaN和任何东西都不相等。厉害到自己都不等于自己


 alert(NaN == NaN);返回false    
var a = 0;    
var b;    
var c = a + b;    
alert(c);

认识isNaN()函数

该函数判断括号内的值是否是NaN,是就返回true,不是就返回false

alert(isNaN(c));

10,Number方法的应用

Number()为强制数据类型转换:        
Number("hello world");    //NaN    
Number("123456");         //123456


11,八进制和十六进制的介绍

 我们平时所习惯的不过是一种别人规定好的规则而已,比如iphone的价格,这个是认为规定的,我们知道了,并且已经习惯了,它的贵!
那么这样的习惯其实会有所改变。
比如进制,同样也是一种规则,这种规则是什么样的呢?数数字到9以后,你会想到什么?为什么会是10呢?

9就是10进制的极限了,那么当继续计数的时候,会将9向前进1,然后9归零,这就是10;

那么什么是二进制呢?逢2进1呗,如何用二进制表示3 ?11

什么是八进制呢?如何用八进制表示10 ?12

什么是十六进制呢?如何用十六进制表示25 ?19

理解就够了;

练习

1.为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时?

2.小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。
它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。
提示:摄氏度与芈氏度的转换公式为:摄氏度 = 5/9.0*(华氏度-32) 保留3位小数。

1.计算两个文本框的和
1.计算两个文本框的差
1.计算两个文本框的积
1.计算两个文本框的商

2.var k=10; console.log(k++ + ++k +k +k++);


3.掌握逻辑运算的意义

4.掌握八进制、十六进制的写法

5.掌握NaN的含义

6.掌握Number函数的转换结果

7.计算两个文本框的加减乘除

要求:1.使用parseInt方法类型转换

8.计算结果是用Math.round方法四舍五入

9.计算一个半径为80cm的圆的面积。打印到页面上。