我不过略有一些讨人喜欢的地方而已,怎么会有什么迷人的魔力呢?

一.语法

JS只有一个数字类型,64位浮点数,所以11.0是相同的。为什么这么设计:防止短整型的溢出。

二.对象

1.通常将一个对象的值赋给另一个变量的赋值方法

if(car.name!=null){
a=car.name;
}else{
a='unknown';
}

小技巧(给默认值):

a=car.name||"unknown";

2.尝试从一个对象的属性中取值

通常

if(car!=undefined){
a=car.age;
}

小技巧:

a=car&&car.age;

3.枚举属性

通常我们会简单的使用for in

var name;
for(name in car ){
...
}

这样的后果就是遍历出来的属性你可能无法预知,会遍历到原型上的属性

小技巧:不适用for in,取而代之用for循环

var properties=[
'name',
'status',
'useTime'
]; for(var i=0;i<properties.length;i++){
car[properties[i]] ...
}

4.删除属性

这个东西估计很少有人会使用到,但是存在既有道理,我就遇到过一个场景,在使用一个第三方的类库的时候,类库提供的方法创建的对象有我不需要的属性,而我要将这个对象转化为JSON格式的字符串,这个时候删除属性这个功能尤其的强大。

Delete car.name ;

三.函数

1.调用

JS中有4种调用方式

  • 方法调用模式
  • 函数调用模式
  • 构造器调用模式
  • apply调用模式

四种模式的差异在于 this指向

方法调用模式很好理解,我们写C#定义一个类CAR,给CAR定义一个方法RUN,这个时候实例化一个对象 jeep ,那么方法调用就是 jeep.RUN();

JS中同样如此

var jeep ={
run:function(){
...
}
}; jeep.run();

this的指向为调用的对象。

函数调用模式,如下add2函数被调用的方式,直接写函数名

        function add(a, b) {
return a + b;
}
var shuxue={};
shuxue.calculate1 = function () {
var add2 = function () {
this.value=this.add(3, 3);
} add2();//函数调用模式 }
shuxue.calculate1();//方法调用模式
document.write(shuxue.value);//undefined shuxue.calculate2 = function () {
var that=this;
var add2 = function () {
that.value=this.add(3, 3);
} add2();//函数调用模式 }
shuxue.calculate2();//方法调用模式
document.write(shuxue.value);//

这里的this指向有点问题,JS设计之初把它指向了全局,如果这样就会导致上面代码的异常,代码定义了一个shuxue的对象,并给他定义了2个方法calculate1和calculate2,我们发现都同样在函数内部调用了add2函数,add2函数内试图给对象增加一个属性

value,calculate1的方式失败了,calculate2的方式成功了,区别在于后者把this(这时候的this是指向该函数的)给了函数的内部变量that,固定了下来,内嵌的函数使用外部函数的变量,也就是形成了闭包,前者this指向全局。

构造器调用模式

var Car=function(){};

var jeep=new Car();  //有个约定,如果函数是用来new的,那么大写开头,以区别于一般的函数

this指向这个new的对象

apply调用模式

JS是一门函数式的面向对象编程语言,所以函数可以拥有方法

        function add(a, b) {
return a + b;
} var result=add.apply(null,[3,4]);
document.write(result);// function getName(){
return this.name;
} var car={name:'jeep'}; var name=getName.apply(car);// car并没有getName方法
document.write(name); // jeep

  this指向apply第一个参数

2.模块

我们知道JS很容易造成全局变量的滥用,所以JS提供了一个方法,利用闭包和和函数作用域(JS没有块级作用域ES6之前)构造模块

        var man=function(){
var age=12;
return {
getYear:function(){
return age;
},
setYear:function(n){
age=n;
}
}
} var peter=man();
document.write(peter.getYear()); //
peter.setYear(20);
document.write(peter.getYear());//
document.write(peter.age); //undefined 属性私有只能通过接口访问

3.级联

这个已经被广大程序猿们所喜爱了

    var man=function(){
var age=12;
return {
getYear:function(){
alert(age);
return this;
},
setYear:function(n){
age=n;
return this;
}
}
} var peter=man();
peter.getYear().setYear(20).getYear(); //级联

Javascript的精华啊【如果以后我看到了或者想到了再继续补吧】的更多相关文章

  1. 第一百五十一节,封装库--JavaScript,表单验证--密码确认验证--回答验证--电子邮件验证加自动补全

    封装库--JavaScript,表单验证--密码确认验证--回答验证--电子邮件验证加自动补全 效果图 html <div id="reg"> <h2 class ...

  2. JavaScript基础精华03(String对象,Array对象,循环遍历数组,JS中的Dictionary,Array的简化声明)

    String对象(*) length属性:获取字符串的字符个数.(无论中文字符还是英文字符都算1个字符.) charAt(index)方法:获取指定索引位置的字符.(索引从0开始) indexOf(‘ ...

  3. JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)

    函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) {             return i1 + i2;//如果不写return返回 ...

  4. JavaScript基础精华01(变量,语法,数据类型)

    JavaScript是一种脚本语言. 脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行 JavaScript基本组成 1.基本语法(浏览器基本都支持,有统 ...

  5. Javascript的精华

    一.语法 JS只有一个数字类型,64位浮点数,所以1和1.0是相同的.为什么这么设计:防止短整型的溢出. 二.对象 1.通常将一个对象的值赋给另一个变量的赋值方法 if(car.name!=null) ...

  6. 读《JavaScript语言精粹》的一些感言

    最近看了<JavaScript语言精粹>,并且连着看了两遍,如果非要用言语形容的话,那我只能用4个字来形容:相见恨晚.其中的一些经验经过这么多年的摸索其实也了然,但是作者用这么浅薄的书把有 ...

  7. JavaScript权威指南学习笔记4

    今天看了第9.10.11章,感觉收获最大还是正则表达式那章节,不过这些不用太多脑子思考,问题用到了直接查书就可以了,下面分别总结一下: 第9章类和模块:分9节,前面8节都是在讲类相关的知识,最后一节讲 ...

  8. JavaScript语言精粹-读书笔记

    前言:很久之前读过一遍该书,近日得闲,重拾该书,详细研究一方,欢迎讨论指正. 目录: 1.精华 2.语法 3.对象 4.函数 5.继承 6.数组 7.正则表达式 8.方法 9.代码风格 10.优美的特 ...

  9. JavaScript面试的完美指南(开发者视角)

    为了说明 JS 面试的复杂性,首先,请尝试给出以下结果: onsole.log(2.0 == "2" == new Boolean(true) == "1") ...

随机推荐

  1. [20130704] Intra-Query Parallel Thread Deadlocks

    今天碰到了  Intra-Query Parallel Thread Deadlocks 简单的说就是并发查询把自己给锁住了. 原理: 在并发查询运行是,有一个生产者和一个消费者,生产者等待消费者产生 ...

  2. W3School-CSS 边框(border)实例

    CSS 边框(border)实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS 内边 ...

  3. Windows Azure CN 超业余性能测试

    先来说说为什么会有这篇文章吧.从朋友那里搞来个Windows Azure CN的测试帐号,在公司的时候领导的朋友有一个阿里云的服务器,平时部署小东西都往上面丢,不过那是人家的东西,还有其他的应用跑在上 ...

  4. MAC OSX通过Terminal命令行控制蓝牙状态开关

    defaults write /Library/Preferences/com.apple.Bluetooth.plist ControllerPowerState 0 #关闭蓝牙服务 default ...

  5. POJ 1741 Tree (树的点分治入门)

      Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16172   Accepted: 5272 Descripti ...

  6. 认识与入门 Markdown,Markdown教程

    一.认识 Markdown 在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处理软件 Word 或 Pages 有大量的排版.字体 ...

  7. 为opencv贡献代码

    本文记录本人从发现bug,提交bug,到修复bug的过程.下面enjoy: 1.发现bug 由于项目需要,开发了一个视频检测demo,类似于扫一扫二维码的程序,不过不是这个程序不是扫二维码.具体实现参 ...

  8. 移动前端UI选择

    移动前端UI选择 目录 三.SUI Mobile   一.jQuery Mobile jQuery Mobile 是jQuery在移动设备上的版本,做为主要针对移动设备的框架来说,它提供一个移动设备平 ...

  9. Flex4的可视化显示对象

    flex3中用addChild(child:DisplayObject) 增加显示对象,flex4中用addElement(element:IVisualElement).绝大多数的flex3显示控件 ...

  10. RecyclerView,CardView导入和使用(Demo)

    简介: 这篇文章是ANDROID L——Material Design详解(UI控件)的一个补充或者说是应用实例,如果有时间建议大家稍微浏览一下上篇文章. 本文主要介绍Android L新增加的两个U ...