Javascript基础一

Posted zhaoweinotes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript基础一相关的知识,希望对你有一定的参考价值。

javascript的发展历史:

JavaScript在设计之初只是为了做表单验证。但是现如今,JavaScript已经成为了一门功能全面的编程语言,已经是WEB中不可缺少的一部分,如今的JavaScript是一门既简单又复杂的语言,说它简单是因为可能一小时就能学会,但是如果你要真正掌握它,可能就得需要个几年的时间了。

 

JavaScript的组成:

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

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

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

 

JavaScript和Html5的关系:

 HTML5是一种新的技术,就目前而言,我们所知的HTML5都是一些标签,但是有了JS之后,这些标签深层的扩展功能才得以实现。
 
    比如video标签,我们对其理解为一个简单的标签,但实际上,video标签还有更深层次的扩展功能。
 

如何编写及运行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()原理类似
 
alert()方法
    alert()方法用来停止浏览器加载代码,并弹出()里面的内容。
    浏览器解析代码的顺序(从上到下,从左到右)
 

变量:

  JavaScript 变量是存储数据值的容器。

   var是一个关键字,用来声明一个变量;
  =  表示赋值(取名字);
 
    声明变量以“=”为区分,左边为变量名(被赋值),右边为存放进变量中的内容(给变量赋值)。
 
var x = 7;
var y = 8;
var z = x + y; 

//x、y 和 z 是变量:

从上例中,你可以获得:

  • x 存储值 7
  • y 存储值 8
  • z 存储值 15

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

 

变量的类型(数据类型)

  数值类型(number):1234567890
 
    字符类型(string):"123"  ‘asd‘  "文字"   "数据"(被单引号或双引号,包裹的部分,引号必须配套使用)
 
      定义了未赋值类型(undefined):这是一种特殊类型,当变量被声明,但是没有被赋值的时候,那么该变量的类型的undefined
 
      布尔值类型(boolean):true,false  (真,假)
    
      对象类型(object):{}object
 
      数组类型(array):[]
 
  如何区分或得知不同的数据类型:
            通过关键字  typeof 变量名
 

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

  1. 名字中只能包含 字母、数字、下划线、$、(中文)
  2. 不能以数字开头
  3. 不能是保留字或关键字
  4. 具有相关含义
  5. 驼峰命名
    1. 大驼峰:如ZhongHuaRenMinGongHeGuo
    2. 小驼峰:如zhongHuaRenMinGongHeGuo
  6. 匈牙利命名法:
    1. Int   iNum:以i开头的变量存储整数
    2. Float  fNum:以f开头的变量存储小数
    3. Boolean  bBoo:以b或bo开头的变量存储布尔变量
    4. String  sStr:以s开头的变量存储一个字符串
    5. Char  cCh:以c开头的变量存储一个字符
    6. Object  obj:以o开头的变量存储对象
    7. Array  arr:以arr开头的变量存储数组
    8. Function  fn:以fn开头的变量存储函数

 

 关键字:
        以下这些关键字用于执行特定操作等。按照规则,关键字也是语言保留的,不能用做标识符。
break
do
instanceof
typeof
case
else
new
var
catch
finally
return
void
continue
for
switch
while
debugger*
function
this
with
default
if
throw
delete
in
try
 
 
    保留字:未来可能做为关键字的存在
abstract
enum
int
short
boolean
export
interface
static
byte
extends
long
super
char
final
native
synchronized
class
float
package
throws
const
goto
private
transient
debugger
implements
protected
volatile
double
import
public
 

 

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

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

运算符描述
+ 加法
- 减法
* 乘法
/ 除法
% 系数
++ 递加
-- 递减

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

 

 赋值运算符:=    +=    -=    *=    /=    %=

运算符
例子
等价于
运算结果
= y = 6 y = 6 y = 6
+= y += 1 y = y+1 y = 7
-= y -= 1 y = y-1 y = 5
*= y *= 2 y = y*2 y = 12
/= y /= 2 y = y/2 y = 3
%= y %= 4 y = y%4 y = 2 


关系运算符:  <    <=    >     >=    ==    !=    ===

运算符 说明 例子 运算结果
== 等于 2 == 3 false
=== 恒等于(值和类型都要做比较)
2 === 2
2 === "2"
true
false
!= 不等于,也可写作<> 2 == 3 true
> 大于 2 > 3 false
< 小于 2 < 3 true
>= 大于等于 2 >= 3 false
<= 小于等于 2 <= 3 true

 

【提示】语句结束要加分号,虽然不加分号在JS语法上没有什么问题,但是建议不要省略分号,加了分号之后可以使用软件压缩。

 

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

显式转换的数据类型

1、将非数值转换为数值类型的函数

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。

第一个函数Number(mix),可以用于任何数据类型,该函数先将mix的数据类型转换为number类型,然后再将mix的值转换为数值。

若mix的值能直接转换成数字,则直接显示。若不能则显示0或NaN.

而另两个函数则专门用于把字符串转换成数值。

parseInt(string)函数:将字符串转换为数值,不遵循四舍五入。这里的string必须是数字类型的开头字符串,一直遍历到非数值的那个字符才停止。若不是数字开头,则会显示NaN.

<script>
var num = ["123" , "124.4" , "234asd" , "asf456"] ;
  for (i = 0; i < num.length; i++) {
   console.log(parseInt(num[i]));
  }
</script>

执行结果为:123 , 124 , 234 , NaN .

parseFloat(string):将string转换为浮点数。从数字位开始看,直到非数字位结束,用法与parseInt(string)一致。

parseInt()函数还有另一种用法。parseInt(string,radix):以radix为基底,将string转换成十进制的整数。radix的取值为2-32。

 

2、将其它类型的数据转换为字符串类型的函数

有两个函数可以把其他数据类型转换为字符串。toString() 和 string() 。

String(mix):将mix转换成字符串类型。该函数可以将任何数据类型的值转换为字符串。

toString()函数有两种用法。,

  • 用法一:demo.toString():将demo转换成字符串类型。demo不能等于null undefined
  • 用法二:demo.toString(radix):将十进制的数demo转换为目标进制的数。如123.0.toString(8)为将十进制数字123转换为8进制的字符串。

    注:不能写成123.toString(8) . 因为浏览器解析的时候会解析成小数。

//例题:把一个二进制的数10001000转换成十六进制的数。

//思路:先把二进制转换成十进制,再由十进制转换成十六进制。

var num1 = parseInt(‘10001000‘,2);  //136
var num2 = num1.toString(16);  //‘88‘

3、将值转换成布尔值类型

Boolean(变量):将一个值转换成其对应的布尔值。

(1)原始类型值的转换方法

以下六个值的转化结果为false,其他的值全部为true。

  • undefined
  • null
  • -0
  • +0
  • NaN
  • ‘‘(空字符串)

(2)对象的转换规则

所有对象的布尔值都是true,甚至连false对应的布尔对象也是true。

Boolean(new Boolean(false))
// true

 

隐式的数据类型转换

隐式类型的转换是系统进行运算时自动进行的,但是调用的方法都是显式类型转换的方法。

1、递增和递减操作符

      a++ ,a-- ,++a , --a

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

       这4个操作符对任何值都适用,也就是他们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象,此时伴随着隐式的数据类型转换。

即先将变量通过Number()转换成number的数据类型,然后再进行递增、递减操作。

 

2、(+)(-),即正负号

不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。将变量通过Number()转换成number的数据类型。

 

3、isNaN(变量)

执行过程为:即先将变量通过Number转换,再进行isNaN() 。

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

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

   alert(NaN == NaN);    //返回false

 

4、(+) 加号

先看下面的一段代码

<script>
 var str = 1 + "1";
 var num = 1 + 1;
 var num1 = 1 + false;
 document.write(str , "<br>" , num , "<br>" , num1);
</script>

执行结果为:11 , 2 ,1

所以加法有两个作用。如果没有运算过程中没有字符串时,就将变量通过Number()转换为number类型后,再进行运算。如果有字符串的话,加号两边起的就是字符串连接作用。

 

5、-  *  /  %  减号,乘号,除号,取余 

运算时把数据转换成number类型后,再进行运算。

 

6、&&  ||  !    与或非运算 

  逻辑运算符:  &&    ||    !
运算符 说明 例子 运算结果
&& 逻辑与(and)
x = 2;
y = 6;
x>5 && y>5
FALSE
|| 逻辑或(or)
x = 2;
y = 6;
x>5 || y>5
TRUE
! 逻辑非,取逻辑的反面
x = 2;
y = 6;
!(x > y)
TRUE

将运算符两边的值转换成通过Boolean()函数转换成布尔类型,然后再进行运算。不同的是,&&  ||  返回的是比较后自身的原值,而 !运算返回的是布尔值.

看一个例子。

<script>
  console.log(5 && 3);  //从左往右判断,如果全都为真,则返回最后一个为真的值,只要有一个判断为假,就返回为假的那个值
  console.log(0 || 2);  //从左往右判断,返回第一个为真的值,若完成了全部的判断且所有的值都为假,就返回最后为假的那个值
   console.log(!3);
 </script>

返回的结果为:3 , 2 , false.

 

7、 < > <= >=  ==  !=  比较运算符

当数字和字符串比较大小时,会隐示将字符串转换成number类型进行比较。而当字符串和字符串比较大小时,则比较的是ascii码的大小。最后返回的则是布尔值

<script>  //1)纯数字之间比较
  alert(1<3);//true
  //2)数字字符串比较,会将其先转成数字
  alert("1"<"3");//true
  alert("123"<"123");//false
  //3)纯字符串比较,先转成ascii码
  alert("a"<"b");//true
  alert("abc"<"aad");//false,多纯字母比较,会依次比较ascii码
  //4)汉字比较
  alert("我".charCodeAt());//25105
  alert("的".charCodeAt());//30340
  alert("我"<"的");//true,汉字比较,转成ascii码
  //5)当数字和字符串比较,且字符串为数字。则将数字字符串转为数字
  alert(123<"124");//true,下面一句代码得出124的ascii码为49,所以并不是转成 ascii比较
  alert("124".charCodeAt());//49
  //6)当数字和字符串比较,且字符串为非纯数字时,则将非数字字符串转成数字的时候会转换为NaN,当NaN和数字比较时不论大小都返回false.
  alert(13>"abc");//false
</script>

 

下面看一种特殊情况。

<script>
   //undefined不发生类型转换
 console.log(undefined == undefined);  //true
 console.log(undefined == 0);       //false
 console.log(undefined > 0);        //false
 console.log(undefined < 0);        //false
  //null不发生类型转换
 console.log(null == null);        //true
 console.log(null == 0);          //false
 console.log(null > 0);          //false
 console.log(null < 0);          //false
 console.log(undefined == null);    //true 
  console.log(NaN == NaN);        //false. not a number 不等于任何东西,包括它自己
</script>

在项目工程中,如果用 == 来判断两个数值是否相等,由于会发生隐式类型转换。所以是非常存在非常大的漏洞的。为了解决这一问题。引入了 === (绝对等于)和 !==(绝对不等于)。

<script>
 console.log(1 === "1"); //false
 console.log(1 === 1);   //true
</script>

 

以上是关于Javascript基础一的主要内容,如果未能解决你的问题,请参考以下文章

php生成各种验证码

JavaScript 有用的代码片段和 trick

《前端之路》之 Babel 下一代 JavaScript 语法编译器

ES6 介绍 及 变量基础知识

JavaScript的ES6语法13下一代ES的展望

[WebKit内核] JavaScript引擎深度解析--基础篇字节码生成及语法树的构建详情分析