JavaScript初步了解:

JavaScript编写的代码必须通过HTML/XHTML文档才能执行;

 

有两种方法可以做:

  • 1、将JavaScript代码放到文档<head>的<script>标签之间;
  • 2、将JavaScript代码存为一个扩展名为.JS的独立文件,在文档的<head>部分放一个<script>标签,并把它的src属性指向该文件(独立文件中禁止含有<script>标签,因为在引用的时候,已经用<script>标签了。);
    • <script src=”file.js”></script>
    • 优化方法:最好的做法是把<script>标签放在页面最底部,</body>之前,这样可以使浏览器更快的加载页面;
    • <script>标签没有包含传统的type=”text/javascript”属性也是可以的,因为脚本默认是JavaScript,所以没有必要指定这个属性

程序设计语言分为解释型和编译型:

  • 编译型:Java/C++等语言需要编译器(compoler),编译器是一种程序,能够把用Java等高级语言编写出来的代码,翻译为直接在计算机上执行的文件;
  • 解释型:JavaScript不需要编译器,仅仅需要解释器(是ECMAscript);WEB浏览器负责完成解释和执行工作;

两种语言在代码编写错误时的提示:

  • 编译型:如代码有错误,这些错误在编译阶段就能被发现;程序往往更快,可移植性好,学习难;
  • 解释型:代码中的错误,只能等到解释器执行到有关代码时候才能被发现(才能被浏览器发现,webstorm可以发现代码输入时候的明显错误,C++是什么情况,因为没有接触过,所以不知道);相对比较容易入手,但也能完成复杂的编程任务。

弱语言强语言的区分:有些其他语言在声明变量的同时,还必须同时声明变量的数据类型;这种做法叫类型声明(typing);必须声明类型的语言,称为强类型(strongly typed)语言;JavaScript不需要进行类型声明;因为它是一种弱类型(weakly typed)语言;这意味着JavaScript编写的时候,可以再任何阶段改变变量的数据类型:

  • var age=”thirty three”
  • age=33

上面的代码在JavaScript中可以运行的,JS并不在age是一个字符串还是一个数值;

JavaScript语法

JavaScript的语法和java和C++语言的语法非常相似;

语句(statement)书写:建议在每条语句的末尾加一个分号;每条语句独占一行,这是一个良好的编程习惯;

  • fitst statement;
  • second statement;

优点:

  • 代码更容易阅读;
  • 每条语句独占一行的做法,更容易跟踪JavaScript脚本的执行顺序;

注释(comment)方法有三种:

  • //文字说明或者代码。->注释单行;
  • /*文字或者代码*/ –>注释多行的;
  • <!—文字  ->这是HTML风格的注释,是注释单行的,后面无需—>来结束注释,及时有,也会当做注释内容的一部分;
  • 建议:用//和/**/来做注释;

变量(variable):

人们把会发生变化的东西,称为变量。

把值存入变量的操作称为赋值(assignment),用”=”来进行赋值;

JavaScript允许程序员直接对变量赋值,不需要事先声明;虽然没有强制要求程序员必须提前声明变量,但是提前声明变量是一个很好的习惯;

JavaScript中,变量和其他语法元素的名字都是区分大小写的:mood!==MOOD;

JavaScript中变量的书写格式:JavaScript不允许变量名中含有空格或者变电符号(美元符号$除外);变量允许包含字母,数字,美元符号和下划线(但是第一个字符不允许是数字);

  • 在命名变量的时候,用下划线来分割各个单词;->my_mood
  • 在命名函数的时候,用驼峰命名法/匈牙利命名法(驼峰命名法是函数名,方法名,对象属性名命名的首选格式);
  • 这么做是可以一眼看出,哪是变量,哪是函数;

var my_mood=”happy”中,单词”var”是关键字;my_mood是一个变量的名字;happy是JavaScript中的字面量,是可以再JavaScript中直接书写的数据;文本happy除了它自己以外不表示任何别的东西;

数据类型:

可以用tepyof()来检测数据的类型:string/Number/Boolean/function/Object/Undefined

string:

字符串由零个或多个字符组成;字符包括(但不限于)字母,数字、标点符号和空格;字符串必须包在引号里;单引号和双引号都可以;如果字符串中包含双引号,就把字符串放在单引号里,反义依然;如果就像用双引号去包含,也可以用转义(escaping)符号【\】来转义;

    <script>
    var height="about5'10\"tall";
    alert(height);
    </script>
  • ->about5’10”tall

转义反斜线后面的引号被看做一个普通的字符,而不是这个字符串的结束标志;

个人比较喜欢用双引号包围字符串;

Number:

如果想给一个变量赋数值,数值不仅可以是整数,也可以是负数,还可以是带小数点的数值;带小数点的称为浮点数(floating-point number)

极大或极小的数字可通过科学(指数)计数法来写:

  • var y=123e5;    // 12300000
  • var z=123e-5;   // 0.00123

所有 JavaScript 数字均为 64 位:

  • JavaScript 不是类型语言。与许多其他编程语言不同,JavaScript 不定义不同类型的数字,比如整数、短、长、浮点等等。JavaScript 中的所有数字都存储为根为 10 的 64 位(8 比特),浮点数。

精度

  • 整数(不使用小数点或指数计数法)最多为 15 位(测试出来是17位,但是w3cshool上说是15位)。
  • 小数的最大位数是 17,但是浮点运算并不总是 100% 准确:
<script>
var x;
document.write("<p>只有 17 位: ");
x=12345678901234567890;
document.write(x + "</p>");//结果是12345678901234567000

document.write("<p>只有 17 位: ");
x=0.12345678901234567890;
document.write(x + "</p>");//结果是0.12345678901234568

document.write("<p>不带.前面的0也可以的: ");
x=.12345678901234567890;
document.write(x + "</p>");//结果是0.12345678901234568

document.write("<p>0.2 + 0.1 = ");
x=0.2+0.1;
document.write(x + "</p>");//结果是 0.30000000000000004

document.write("<p>可分别乘以 10 并除以 10 : ");
x=(0.2*10+0.1*10)/10;
document.write(x +"</p>");//结果是0.3
</script>

 

八进制和十六进制

如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果前缀为 0 和 “x”,则解释为十六进制数。

var y=0377;
var z=0xFF;

提示:绝不要在数字前面写零,除非您需要进行八进制转换。

Number类型包括两种数值:整型和浮点型。

由于保存浮点数数值需要的内存空间比整型数值大两倍,因此ECMAScript会自动将可以转换为整型的浮点数值转为整型。

<script>
var a=12.00;
alert(a); //结果是12
</script>

NaN,即非数值(not a number)是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况

ECMAScript提供了isNaN()函数,用来判断这个值到底是不是NaN。isNaN()函数在接收到一个值后,会尝试将这个值转换为数值。

<script>
alert(isNaN(NaN)); //true
alert(isNaN(25)); //false
alert(isNaN(true)); //false
</script>

有三个函数可以把非零数值转换为数值:Number()、parseInt()和parseFloat()

Number()是转型函数,可以用于任何数据类型,而另外两个则专门用于把字符串转换为数值。

<script>
alert(Number("256"));//256
alert(Number("256abc"));//NaN
alert(Number("abc256"));//NaM
alert(Number("08.9"));//8.9
alert(Number(undefined));//NaN
alert(Number("undefined"));//NaN
alert(Number(null));//0
</script>

由于Number()函数在转换字符串时比较复杂且不够合理,因此在处理整数时更常用的是parseInt()

<script>
alert(parseInt("256"));//256
alert(parseInt("256abc"));//256
alert(parseInt("abc256"));//NaM
alert(parseInt("08.9"));//8
alert(parseInt(undefined));//NaN
alert(parseInt("undefined"));//NaN
alert(parseInt(null));//NaN
</script>

parsrInt转换整数,十进制,八进制,十六进制都可以转换;

<script>

alert(parseInt("256abc256"));//256
alert(parseInt('AF',16)); //175 识别八进制和十六进制;进制目前不会;需要学习;
</script>

parseInt只能转数字,遇到非数字的字符串,直接跳出,返回已经读取过的数字;parseFloat用于浮点数值转换,和parseInt()一样,从第一位解析到非浮点数值位置。

<script>
var a=12;
var b="abc";
var c=undefined;
alert(parseInt(a)+parseInt(b));//NaN
alert(parseInt(a)+parseInt(c));//NaN
alert(parseInt(a)+parseInt(d));//无提示
</script>

任何数字和NaN相加等于NaN;

<script>
var a=12;
var b="abc";
var c=undefined;
var d=broszhu;
alert(parseInt(a)+parseInt(b));
alert(parseInt(a)+parseInt(c));
alert(parseInt(a)+parseInt(d));
//如果是全部没有提示;浏览器没有反应;
</script>

如果和一个非法的相加,整个浏览器就没有反应了;下面是判断是否相等;

<script>
var a=12;
var b="abc";
var c=undefined;

alert(parseInt(a)==parseInt(b));//false
alert(parseInt(a)==parseInt(c));//false
</script>

NaN和NaN是不相等的;即使是他们自己都是不相等的;如下

<script>
var a=12;
var b="abc";
var c=undefined;

alert(parseInt(b)==parseInt(b));//false
alert(parseInt(b)==parseInt(c));//false
</script>

判断NaN:判断是否为NaN(可用于假如用户输错了,可以用(isNaN())先判断是否出错了,输入所有内容均合格后才正确运费。否则弹窗提示用户)

  • var a=parsetInt(“abc”);
  • alert(isNaN(a));
  • ->true

数字属性和方法

属性:
  • MAX VALUE
  • MIN VALUE
  • NEGATIVE INFINITIVE
  • POSITIVE INFINITIVE
  • NaN
  • prototype
  • constructor
方法:
  • toExponential()
  • toFixed()
  • toPrecision()
  • toString()
  • valueOf()

注意,尤其要注意的是,typeof是操作符,不是方法,因此,typeof中的字母’o’是小写的。typeof操作符是用来检测变量的数据类型。对于值或者变量使用typeof操作符会返回字符串。

boolean:

布尔只有两个可选值-true和false;

从某种意义上讲,为计算机设计程序就是与布尔值打交道;不管是使用术语true/false、yes/no或者1和0,重要的是只能两种可取值中的一种!

布尔值不是字符串,千万不要把布尔值用引号括起来,布尔值false和”false”是不同的;

<script>
var a="false";//声明变量a,并给把一个字符串"false"赋值给a;
var b=false;//声明一个变量b,并把布尔值false赋值给b,
</script>

function:

如果需要多次使用同一段代码,可以把他们封装成一个函数;然后随时调用它;(需要先对函数命名,做出定义后再调用)每当需要反复做一件事时,都可以利用函数来避免重复键入大量的相同内容;

函数真正的魅力在于,你可以把不同的数据传递给它们,而它们将使用这些数据去完成预定的操作。我们把传递给函数的数据成为参数(argument),这种行为叫传参;

函数的真正价值是:我们可以把它当做一种数据类型来使用,这就意味着可以把一个函数的调用结果赋给一个变量(用ruturn来返回);

在定义函数时;可以为它声明任意多个参数,只要用逗号把它们分割开来就行,在函数的内部,可以像使用普通变量那样使用它的任何一个参数.

········