JavaScript之基本概念

简介:

     13年的时候就买了《JavaScript 高级程序设计 》(第3版)和Jquery的书,平时偶尔也看一两眼,没系统的看,今年定下的目标是学习web,所以打算系统的学习一下。写下JavaScript系列的博客也算是笔记,以后好复习。内容也是按照《JavaScript 高级程序设计 》(第3版)的顺序总结,今天总结javascript的一些基本概念。

     1.区分大小写(这个不用解释)

     2.命名规则

         一般用字母、数字、下划线或美元$符号。第一个字符必须是字母、下划线或美元符号$.

     3.语句

        语句结尾可以省略分号,但为了让编码易读,减少错误,尽量加上分号。

     4.变量

        变量是松散类型,可以保存任何类型的数据。声明变量尽量用var来声明,否则变量就会变成全局变量。同时不能定义名为eval和arguments的变量,否则会导致语法错误。

     5.数据类型

       主要包括5种基本数据类型 :Undefined、Null、Boolean、Number 和String。还有一个复杂数据类型:Object.

       1).Undefined类型

           只有一个值undefined,在使用var声明变量但未对其进行初始化,则该变量的值就为undefined。即定义变量的默认值是undefined.

       2).Null类型

          它也只有一个值null,它表示一个空对象指针,如果变量用来保存对象,最好将变量初始化为null。这样只要坚持这个变量是否为null值就能判断变量是否被保存对象的引用。

      3).Boolean类型

          这个略。

      4).Number类型

         这里主要是有两个内容:NaN和数值转换。

         1.NaN:非数值,表示要返回数值的操作数未返回数值的情况。比如X/0=NaN。

           它主要有两个地方比较特殊:1.任何涉及NaN的操作都返回NaN。2.Nan与任何值(包括NaN)都不相等。那如何判断一个值是不是非数值呢?这里有一个函数isNaN(),传入一个任意类型的参数,如果不能被转化为数值则返回true。

         2.数值转换

            主要有3个函数:Number()、parseInt()、parseFloat(). 后两个主要是用来把字符串转数值。

            Number()转换规则:

            如果是Boolean值,ture变1,false变0;

            如果是数字,简单传入传出;

            如果null,返回0;

            如果是undefined,返回NaN;

            如果是字符串:

               1.只包含数字(包括前面带正号、负号):转为10进制数,前面的0去掉 如:"011"变为11;

               2.包含有效浮点数,转为浮点数

               3.有效十六进制转为同等大小的十进制

               4.字符串是空,转为0

               5.如果包含除上述以上格式的字符串,则转为NaN

               6.如果是对象,则调用对象的valueOf(),依照前面规则转换返回的值,如果转换结果为NaN,则调用对象的tostring(),然后按照前面的规则转换。

        5).String类型

             字符串是不可变的,一但创建,值不会改变。要改变首先销毁原来的字符串,然后用新的变量填充。

             字符串转换是常用的有两种方法:tostring()、String().但null、undefined没有。

             数值、布尔值、字符串都有tostring()方法。多数情况不需要传递参数,在调用数值的tostring()方法时,可以传递一个参数:输出数值的基数,默认是10进制.

       6).Object类型

           对象可以通过new操作符创建,可以为其添加属性和方法来自定义对象。

           Object的每个实例都有以下属性和方法:

           Constructor :保存着用于创建当前对象的函数。构造函数。

           hasOwnProperty(propertyName) :用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。作为参数的属性名必须以字符串形式指定。

           isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。

           propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。也是要用字符串指定参数。     

           toLoacleString():返回对象的字符串表示。

           tostring():返回对象的字符串表示。

           valueof():返回对象的字符串、数值或布尔值表示。

     6.typeof操作符

        由于是松散类型,因此需要有一个方法检测给定变量的数据类型typeof.对一个值使用typeof操作符可能返回下列某个字符串:

        "undefined" :未定义

        "boolean"    :布尔值

        "string"       :字符串

        "number"    :数值

        "object"      :对象或null

        "function"   :函数

      7.操作符           

         1)、递增递减操作符

               1.对于字符串来说能转数字的转数字然后进行加减操作

               2.对于布尔值,转为0、1在加减操作

               3.浮点直接加减

               4.对于对象先valueof()或tostring()在进行前面的加减操作。

        2)、一元加、减

              +放在数值前面没影响。对于非数值时,按照number()转换规则。

       3)、布尔操作符(与、或、非)

               1. 逻辑非操作符先将操作数转为布尔值再对其求反。

                    逻辑非转换成布尔值的规则:若操作数为对象、非空字符串、非0数值则转为true,其他为false。

               2.逻辑与

                  (1)对于布尔值,逻辑与是非常简单的,只要有一个false,就返回false;

                 (2)对于不是布尔值的情况则:

                         如果第一个操作数是对象,则返回第二个数

                         如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;

                         如果第两个操作数都是对象,则返回第二个数操作数 

                         如果有一个操作数是null,则返回null

                         如果有一个操作数是NaN,则返回第NaN

                         如果第一个操作数是undefined,则返回unfined

                   (3)对于逻辑与的短路问题:           


<script type="text/javascript">
var found=true;
var result=(found && someUdefinedVariable);
alert(result);//显示someUdefinedVariable
//例子中的found为true,所以会对someUdefinedVariable继续求值,但是该变量未定义,所以会提示错误
  </script>

<script type="text/javascript">
var found=false;
var result=(found && someUdefinedVariable);
alert(result);//显示false
  //例子中的found为false,所以第一个操作数就已经能够决定结果,就不会在对第二个操作数求值
  </script>

       3.逻辑或(||)

                     (1)对于布尔值,逻辑或是非常简单的,只要有一个true,就返回true;

                     (2)对于不是布尔值的情况则:

                               如果第一个操作数是对象,则返第一个操作数

                               如果第一个操作数的求值结果为false,则返回第二个操作数

                               如果两个操作数都是对象,则返回第一个操作数

                               如果两个操作数是null,则返回null

                               如果两个操作数是NaN,则返回NaN

                               如果两个操作数是undefined,则返回undefined 



<script type="text/javascript">
   var found=true;
   var result=(found || someUdefinedVariable);
    alert(result);//弹出true
  //对于逻辑与,当一个为true的时候,就不会在对第二个操作数进行求职了
  </script>


 7.函数

在学习Node.js中看到函数这块,就把js中的函数也复习一下。函数在各个编程语言中都会存在。在Js中的函数和C#、Java这些还是有区别的。

一、函数

1.Js中用function来声明函数.

2.函数定义不必指定返回值。任何函数在任何时候都可以通过return后跟要返回的值来实现返回值。推荐的做法是要么都有返回值要么都没有返回值。

3.不能将函数、参数命名为eval和arguments,同时不能出现两个命名参数同名的情况。

二、参数

1.js中函数不介意传递多少个参数以及参数的数据类型。之所以会这样,是因为js中的参数在内部是用一个数组来表示的,函数接收的始终是这个数组。实际上在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。可通过arguments[index]来获取对应索引的值,通过length属性来获取参数个数。

2.arguments的值永远与对应命名参数的值保持同步。修改arguments的值命名参数的值就会随之改变,但修改命名参数的值不会改变arguments对应的值。

3.如果传入一个参数,argmuents[1]设置的值不会反应到命名参数中,因为arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。

4.对于没有传递值的命名参数将自动被赋予undefined值。

5.js中所有的参数传递的都是值,不可能通过引用传递参数。

三、没有重载

js中没有重载,如果定义了两个名字相同的函数,则该名字只属于后定义的函数。


相关文章
|
21天前
|
存储 JavaScript 前端开发
解释 JavaScript 中的作用域和作用域链的概念。
【4月更文挑战第4天】JavaScript作用域定义了变量和函数的可见范围,静态决定于编码时。每个函数作为对象拥有`scope`属性,关联运行期上下文集合。执行上下文在函数执行时创建,定义执行环境,每次调用函数都会生成独特上下文。作用域链是按层级组织的作用域集合,自内向外查找变量。变量查找遵循从当前执行上下文到全局上下文的顺序,若找不到则抛出异常。
21 6
|
2月前
|
JavaScript 前端开发 网络协议
​Node.js 教程(一) 基本概念与基本使用
​Node.js 教程(一) 基本概念与基本使用
|
3月前
|
JavaScript 前端开发 Java
Node.js专题讲解 第1期 概念篇
Node.js专题讲解 第1期 概念篇
23 0
|
3月前
|
JavaScript 前端开发
Node.js中的EventEmitter模块:基本概念、使用方法和常见应用场景
Node.js中的EventEmitter模块:基本概念、使用方法和常见应用场景
61 0
|
4月前
|
自然语言处理 JavaScript 前端开发
作用域的概念及作用?作用域的分类?.js 属于哪种作用域?
作用域的概念及作用?作用域的分类?.js 属于哪种作用域?
33 0
|
4月前
|
前端开发 JavaScript
JavaScript 前端框架相关: React、Vue或Angular中组件化的概念是什么?
JavaScript 前端框架相关: React、Vue或Angular中组件化的概念是什么?
79 3
|
4月前
|
负载均衡 JavaScript 算法
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
43 1
|
1月前
|
移动开发 前端开发 JavaScript
编程笔记 html5&css&js 002 一些基本概念
编程笔记 html5&css&js 002 一些基本概念
|
2月前
|
存储 JavaScript 前端开发
JavaScript基础:了解核心概念和技能
JavaScript基础:了解核心概念和技能
55 1
|
3月前
|
消息中间件 自然语言处理 JavaScript
【面试题】你理解中JS难理解的基本概念是什么?
【面试题】你理解中JS难理解的基本概念是什么?