博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js笔记精华版
阅读量:6298 次
发布时间:2019-06-22

本文共 4156 字,大约阅读时间需要 13 分钟。

hot3.png

【变量】

    1.重复声明变量不仅是合法的,而且也不会造成任何错误。
    2.如果尝试给一个用var语句的变量赋值,js会隐式声明这个变量,
    但注意,隐式声明的变量总是被创建一个全局变量,即使该变量只是在
    一个函数体内使用。
    3.局部变量和全局变量同名可以有效地隐藏全局变量。
    4.局部语句必须是var语句,否则就是全局变量了。
    5.js中没有块级作用域的概念,函数中声明的所有变量,无论是在哪
    里声明,在整个函数中他们都是有定义的,这个说法对全局变量也是起作用的。
    ex:

var scope = "global";function F(){alert(scope);var scope = "local";}F();

    6.js中所有的数字都是浮点型的,所以除法的结果也是浮点型的,除数是0的

    结果为正无穷大或负无穷大,而0/0的结果则是NaN。
【运算符】
    1.“==”(类型自动转换,然后比较值),“===”(类型和值一块比较)。
    2.typeof(),返回一个字符串来表示一个操作数的类型。
    3.instanceof,左边是一个对象,右边是对象类型的名字。
    4.除了加号外,其他运算符会把非数字变成数字。
    5.比较运算符只能在数字或者字符串上执行,所以不是数字或者字符串的运算数
    将被转换为数字或字符串。
【对象和数组】
    1.constructor属性:每个对象都有一个constructor属性,它引用了初始化这个
    对象的构造函数。
    2.hasOwnProperty(),如果此方法中指定的参数属性来自本地定义的一个非继承
    的属性,此方法返回true。
ex:

var o = {};o.hasOwnProperty("toString");// return false3.isPrototypeOf(),//如果此方法所属的对象是参数的原型对象,那么就返回true。ex:var o = {};Object.prototype.isPrototypeOf(o);  //trueObject.isPrototypeOf(o);  //false

4.思考如何自定义方法比较两个对象是否相等?

【函数】
1.函数直接量
ex:

(1)var f = function(x){return x*x;}(2)var f = function fact(x){return x*x;}(3)var f = (function(x){return x*x;})(10);// 定义后马上调用

【正则表达式】

    1.正则表达式的两种定义:
    (1)var reg = /regex/[i/g/m]; // i:忽略大小写,g:上下文查找,m:多行查找
    (2)var reg = new Regex("regex",["i/g/m"]);
    2.字符串的匹配:
    reg.test(string);// return true or false
    string.match(reg);// 返回所有匹配项的数组
    string.exec(reg);// 返回第一个匹配项,其他的是反向引用
    注意:exec()方法的全局检索和非全局检索区别在于:
    全局检索会多出一个lastIndex索引来指示下一次开始匹配字符的位置。
    而且可以多次调用exec()方法来匹配所有匹配文本。
    对正则的exec方法和字符串的match方法,当没有全局标志g时,
    它们两的行为是一样的,有index,input,lastindex等属性!
    除了返回与表达式相匹配的文本外,所有匹配的子串也会返回!
    3.元字符:
    ( [ { \ ^ $ | } ? * + .
    任何时候要在正则表达式中使用元字符都必须对它们进行转义,用'\'。
    ex: 

var reg = /\?/;var reg = new RegExp("\\?");  // 这样就和java类似。

4.特殊转义序列:

var reg = /(dog)\1/;  等价于  var reg = /dogdog/;

5.特殊字符序列:

var str1 = "12345678";var reg = /(\d{4})(\d{4})/;var str2 = str1.replace(reg,"$2$1");alert(str2); // outputs: "56781234";

6.非捕获性分组:

var t = "#12345678";var reg = /#(?:\d+)/;reg.test(t);alert(RegExp.$1); // outputs "";

7.前瞻:

正向前瞻:将模式放在(?=和)之间

var str1=”bedroom”;var str2=”bedding”;var re=/(bed(?=room))/;alert(re.test(str1));//outputs “true”alert(RegExp.$1));//outputs “bed”;alert(re.test(str2))//ouputs “false”;

----------------------------------------

负向前瞻:将模式放在(?和)之间

var str1=”bedroom”;var str2=”bedding”;var re=/(bed(?!room))/;alert(re.test(str1));//outputs “false”alert(RegExp.$1));//outputs “bed”;alert(re.test(str2))//ouputs “true”;

8.边界:

边界 描述
^ 行开头
$ 行结尾
\b 单词的边界
\B 非单词的边界
【this】
    在全局环境中,this等于window,而当函数作为某个方法的对象调用时,
    this等于那个对象。不过。匿名函数的执行环境具有全局性,因此其this
    对象通常指向window。
    ex:

var name = "The Window";var object = {    name: "My Object",    getNameFunc: function(){       return function(){          return this.name;       };    }};alert(object.getNameFunc()());// "The Window"

    出现上面的情况的原因是:每个活动对象在被调用时,其活动对象会自动取得

    两个特殊变量:this和arguments。内部函数在搜索这两个变量时,只会搜索到其
    活动对象为止,因此不可能直接访问外部函数中的这两个变量。
    解决方法,把外部的this对象放在一个闭包能访问到的变量里:

var name = "The Window";var object = {   name : "My Object",   getNameFunc : function(){      var that = this;      return function(){         return that.name;      };   }};alert(object.getNameFunc()());  // "MyObject"

-------------------------------------------------------------------------

this例题:
【纯粹的调用】

function test(){  this.x = 1;  alert(this.x);}

// this代表全局对象Global

// 证明this代表Global对象

var x = 1;function test(){  this.x = 0;}test();alert(x); // 0

----------------------------------------------

【this作为对象方法调用】

function test(){  alert(this.x);}var o = {};o.x = 1;o.m = test;o.m(); // 1// this代表o这个对象

----------------------------------------------

【this作为构造函数调用】

function test(){   this.x = 1;}var o = new test();alert(o.x); // 1// this代表这个新对象

-----------------------------------------------

【apply调用】:apply是函数的方法,改变函数的调用对象。

var x = 0;function test(){  alert(this.x);}var o={};o.x = 1;o.m = test;o.m.apply(); //0     apply参数为空时,this代表Globalo.m.apply(o);

【执行上下文】

    a.变量、函数表达式——变量声明,默认赋值为undefined。
    b.this——赋值。
    c.函数声明——赋值。
    这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。

【js代码的位置】

        关于这个问题,yahoo团队做过一个最佳实践,比较经典的描述如下:

        样式在上,脚本在下。         

        当我们把样式放在<head>标签中时,浏览器在渲染页面时就能尽早的知道每个标签的样式,我们的用户就会感觉这个页面加载的很快。         

        但是如果我们将样式放在页面的结尾,浏览器在渲染页面时就无法知道每个标签的样式,     直到CSS被下载执行后。

        另一方面,对于Javascript来说,因为它在执行过程中会阻塞页面的渲染,所以我们要把它放在页面的结尾。

 

好累,谢谢大家。843294669(你懂得)

转载于:https://my.oschina.net/843294669/blog/785715

你可能感兴趣的文章
windows系统如何添加ssh key到github
查看>>
转 graphviz工具及其原理
查看>>
HTML的入门概念
查看>>
hdu 4632 子字符串统计的区间dp
查看>>
Oracle PL/SQL编程学习笔记:游标
查看>>
(转载)hadoop(13) 添加或删除datanode节点
查看>>
Python 匿名函数
查看>>
scrapy多个page爬取, post请求, 通过爬到的URL继续发请求爬页面
查看>>
bzoj 1189 紧急疏散 网络流
查看>>
2015年获得大数据顶尖职位必备的9项技能
查看>>
JTA和JTS
查看>>
OC实例变量和属性-@synthesize与@property
查看>>
MP3 编码解码 附完整c代码
查看>>
MVC匿名类传值学习
查看>>
POJ 3057 Evacuation(二分匹配)
查看>>
POJ - 2549 Sumsets
查看>>
《系统分析与设计方法》 计算投资回收分析
查看>>
客户端AJAX验证表单
查看>>
HTML框架,列表,表格
查看>>
UIButton设置 textAlignment 属性的方法
查看>>