Javascript的精华啊【如果以后我看到了或者想到了再继续补吧】
我不过略有一些讨人喜欢的地方而已,怎么会有什么迷人的魔力呢?
一.语法
JS只有一个数字类型,64位浮点数,所以1和1.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的精华啊【如果以后我看到了或者想到了再继续补吧】的更多相关文章
- 第一百五十一节,封装库--JavaScript,表单验证--密码确认验证--回答验证--电子邮件验证加自动补全
封装库--JavaScript,表单验证--密码确认验证--回答验证--电子邮件验证加自动补全 效果图 html <div id="reg"> <h2 class ...
- JavaScript基础精华03(String对象,Array对象,循环遍历数组,JS中的Dictionary,Array的简化声明)
String对象(*) length属性:获取字符串的字符个数.(无论中文字符还是英文字符都算1个字符.) charAt(index)方法:获取指定索引位置的字符.(索引从0开始) indexOf(‘ ...
- JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) { return i1 + i2;//如果不写return返回 ...
- JavaScript基础精华01(变量,语法,数据类型)
JavaScript是一种脚本语言. 脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行 JavaScript基本组成 1.基本语法(浏览器基本都支持,有统 ...
- Javascript的精华
一.语法 JS只有一个数字类型,64位浮点数,所以1和1.0是相同的.为什么这么设计:防止短整型的溢出. 二.对象 1.通常将一个对象的值赋给另一个变量的赋值方法 if(car.name!=null) ...
- 读《JavaScript语言精粹》的一些感言
最近看了<JavaScript语言精粹>,并且连着看了两遍,如果非要用言语形容的话,那我只能用4个字来形容:相见恨晚.其中的一些经验经过这么多年的摸索其实也了然,但是作者用这么浅薄的书把有 ...
- JavaScript权威指南学习笔记4
今天看了第9.10.11章,感觉收获最大还是正则表达式那章节,不过这些不用太多脑子思考,问题用到了直接查书就可以了,下面分别总结一下: 第9章类和模块:分9节,前面8节都是在讲类相关的知识,最后一节讲 ...
- JavaScript语言精粹-读书笔记
前言:很久之前读过一遍该书,近日得闲,重拾该书,详细研究一方,欢迎讨论指正. 目录: 1.精华 2.语法 3.对象 4.函数 5.继承 6.数组 7.正则表达式 8.方法 9.代码风格 10.优美的特 ...
- JavaScript面试的完美指南(开发者视角)
为了说明 JS 面试的复杂性,首先,请尝试给出以下结果: onsole.log(2.0 == "2" == new Boolean(true) == "1") ...
随机推荐
- jquery最常用的几个方法。
jquery使用手册:http://www.eduyo.com/doc/jquery/cheatsheet.html addClass 样式: <style> .textRed { col ...
- 用批处理来自动化项目编译及部署(附Demo)
阅读目录 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 介绍 详细 处理 结论 Demo下载 介绍 一个项目从立项开始,可能就已经根据公司的配置模板将 ...
- Android Paint类方法说明
* Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类, ...
- Flex 布局教程:语法篇[转]
网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...
- vi/vim实用命令
查找 n是下一个,N是上一个 撤销和重做 u:撤销上一步的操作 ctrl+r:恢复上一步被撤销的操作 替换 :1,$ s/aaa/bbb/g
- MMORPG大型游戏设计与开发(客户端架构 part14 of vegine)
渲染在客户端中具有着至关重要的地位,试想我们玩游戏的第一感觉是什么就会明白了,良好的画面效果对客户端来说是多么的迫切.没有学习过opengl或是direct3d这些渲染API的朋友们也不必担心,而学习 ...
- 阿里云 CentOS6.5 ssh连接慢的解决方案
我租了一台阿里云深圳的服务器,用的是CentOS6.5的系统,最近要在服务器上小改点代码,但是不管用private shell 还是securecrt工具连接,连上去后,都特别慢,经常敲一段代码要过个 ...
- jquery.roundabout.js实现3D图片层叠旋转木马切换
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js. 兼容性如图: html结构代码: <div id="featured-area& ...
- HDU3535AreYouBusy[混合背包 分组背包]
AreYouBusy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- NOIP2008传纸条[DP]
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...