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中没有重载,如果定义了两个名字相同的函数,则该名字只属于后定义的函数。


相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
65 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
5月前
|
设计模式 JavaScript 前端开发
在JavaScript中,继承是一个重要的概念,它允许我们基于现有的类(或构造函数)创建新的类
【6月更文挑战第15天】JavaScript继承促进代码复用与扩展,创建类层次结构,但过深的继承链导致复杂性增加,紧密耦合增加维护成本,单继承限制灵活性,方法覆盖可能隐藏父类功能,且可能影响性能。设计时需谨慎权衡并考虑使用组合等替代方案。
46 7
|
1月前
|
设计模式 JavaScript 前端开发
探索JavaScript中的闭包:从基础概念到实际应用
在本文中,我们将深入探讨JavaScript中的一个重要概念——闭包。闭包是一种强大的编程工具,它允许函数记住并访问其所在作用域的变量,即使该函数在其作用域之外被调用。通过详细解析闭包的定义、创建方法以及实际应用场景,本文旨在帮助读者不仅理解闭包的理论概念,还能在实际开发中灵活运用这一技巧。
|
1月前
|
存储 JavaScript 前端开发
JavaScript 对象的概念
JavaScript 对象的概念
37 4
|
1月前
|
缓存 JavaScript 前端开发
深入了解JavaScript的闭包:概念与应用
【10月更文挑战第8天】深入了解JavaScript的闭包:概念与应用
|
1月前
|
前端开发 JavaScript 程序员
【从前端入门到全栈】Node.js 之核心概念
【从前端入门到全栈】Node.js 之核心概念
|
1月前
|
缓存 JavaScript 前端开发
Node.js模块化的基本概念和分类及使用方法
Node.js模块化的基本概念和分类及使用方法
32 0
|
1月前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包:概念与应用
【10月更文挑战第8天】深入理解JavaScript中的闭包:概念与应用
|
2月前
|
自然语言处理 JavaScript 前端开发
探索JavaScript中的闭包:从基础概念到实际应用
本文深入探讨了JavaScript中闭包的概念,从定义、作用域链和实际应用等方面进行了详细阐述。通过生动的比喻和实例代码,帮助读者理解闭包在函数执行上下文中的重要性,以及如何在实际开发中有效利用闭包解决复杂问题。同时,文章也指出了过度使用闭包可能导致的潜在问题,并给出了相应的优化建议。
|
3月前
|
JavaScript 前端开发
js bom的概念
js bom的概念
35 1