JavaScript编程细节

JavaScript内容
尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:
目前我们学习JavaScript也就是需要学习:
JavaScript语法基础
使用JS操作网页(DOM)
使用JS操作浏览器(BOM)

注:
javascript运行必须依赖于宿主环境语言,即页面语言HTML。
是解释型的语言,解释型:不需要编译,解释器程序会每读取一条语句就执行。运行速度慢,浏览器中默认内置了javascript的解释器程序。
浏览器中默认内置了javascript的解释器程序。

JavaScript

(1)要特别注意相等运算符==。

JavaScript在设计时,有两种比较运算符:

第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。

(2)另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:
`NaN === NaN; // false`

唯一能判断NaN的方法是通过isNaN()函数:
isNaN(NaN); // true

最后要注意浮点数的相等比较:
1 / 3 === (1 - 2 / 3); // false
这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

(3)null和undefined

null表示一个“空”的值,它和0以及空字符串”不同,0是一个数值,”表示长度为0的字符串,而null表示“空”。
在其他语言中,也有类似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。但是,在JavaScript中,还有一个和null类似的undefined,它表示“未定义”。
JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。

(4)静态语言和动态语言

在JavaScript中,使用等号=对变量进行赋值。可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var申明一次,例如:

var a = 123; // a的值是整数123
a = 'ABC'; // a变为字符串

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下:

int a = 123; // a是整数类型变量,类型用int申明
a = "ABC"; // 错误:不能把字符串赋给整型变量

和静态语言相比,动态语言更灵活,就是这个原因。

(5)strict模式
'use strict';

使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内。

(6)模板字符串

如果有很多变量需要连接,用+号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量:

var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
(7)字符串不可变

字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:

var s = 'Test';
s[0] = 'X';
alert(s); // s仍然为'Test'

函数的定义格式:

function 函数名(形参列表){
    函数体 ;   
}
(8)javascript的函数要注意的细节:
1. 在 javascript中函数 定义形参时是不能使用var关键字声明变量 的。
2. 在javascript中 的函数是没有 返回值类型 的,如果函数需要返回数据给调用者,直接返回即可,如果不需要返回则不返回。
3. 在 javascript中是没有函数重载的概念的,后定义的同名函数会直接覆盖前面定义同名函数。
4. 在javascript中任何的函数内部都隐式的维护了一个arguments(数组)的对象,给函数 传递数据的时候,是会先传递到arguments对象中,然后再由arguments对象分配数据给形参的。
需求:定义一个函数做两个参数的加法功能。
*/
    function  add(a,b){
        var sum = a+b;
        document.write("两个参数的总和:"+ sum);    
        //return sum;
    }

    function add(){
        document.write("长度:"+arguments.length+"<br/>");
        for(var index = 0 ; index<arguments.length ; index++){
            document.write(arguments[index]+",");   
        }
        //var sum  = a+b+c; 
        //var sum = 0;
        //document.write("三个参数的总和:"+ sum);
    }
    //调用函数
    add(11,21,13,14);

自定义对象:

在javascript没有类的概念,只要有函数即可创建对象。

自定义对象的方式1: 使用无参的函数创建对象。

例子:
function Person(){}
        var p = new Person(); //创建了一个Person对象了
        p.id = 110;
        p.name = "狗娃";
方式2:使用带参的函数创建对象。
function Person(id,name){
            this.id = id;
            this.name = name;   
            this.say = function(){
                alert(name+"呵呵");   
            }
        }
        var p = new Person(110,"狗剩");   //创建对象
方式3: 使用Object函数创建对象     
var p = new Object();
        p.id = 110;
        p.name = "铁蛋";
方式4:使用字面量的方式创建.
    var p = {
            id:110,
            name:"狗娃",
            say:function(){
                alert(this.name+"呵呵");  
        }   
    }   

Prototype的使用

<script type="text/javascript">
  //把方法添加到数组对象
      Array.prototype.getMax=function(){
          var max=this[0];
          for(var i=0;i<this.length;i++){
              if(max<this[i]){
                  max=this[i]
              }
          }
          return max;
      }
      Array.prototype.getIndex=function(target){
          for(var i=0;i<this.length;i++){
              if(this[i]==target){
                  return i;
              }
          }
          return -1;
      }
      var arr=new Array(12,34,6,3,62,32);
      var max=arr.getMax();
      var index=arr.getIndex(6);
      document.write("max="+max+"<br/>");
      document.write("index="+index+"<br/>");
  </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值