主要包含以下内容,浏览器能够直接显示字面量

时间:2020-01-05 02:17来源:美高梅游戏网站
在源码中很多地方会判断一个值是否被定义,所以这里直接抽象成一个公共函数。传入任意值,返回是一个布尔值。 Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data",      

在源码中很多地方会判断一个值是否被定义,所以这里直接抽象成一个公共函数。传入任意值,返回是一个布尔值。

  1. Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data",  
  2.                 "Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout", "Ext.app", "Ext.ux");  
19.ECMAScript族谱

美高梅手机游戏网站 1

ECMAScript族谱

  • Function.prototype成员:
    1.arguments:获取函数的实参,被函数内部的arguments替代了。//只能在函数内部用,es6中用rest代替
    2.length:获取形参的长度
    3.name:获取函数的名字,此属性不允许修改
    4.caller:用于获取当前在函数是在哪个函数中调用的,已经被废弃了。
    5.constructor:指向当前构造函数,Function
    6.call:调用函数,重新指向this
    7.apply:调用函数,重新指向this
    8.bind:重新指向this,返回一个新的函数,不调用。
    arguments使用场景://只能用于函数内部,相当于函数内部的属性
/*jQuery的css方法
设置单个样式:.css(name, value)
设置多个样式:.css(obj)
获取样式.css(name)*/

function css() {
  if (arguments.length === 2) {
    console.log("要执行设置单个样式的操作");
  }
  if (arguments.length === 1) {
    var temp = arguments[0];
    if (typeof temp === "object") {
      console.log("要执行设置多个样式的操作");
    }
    if (typeof temp === "string") {
      console.log("要执行的是获取样式的操作");
    }
  }
}

function max() {
  return Math.max.apply(Math, arguments);
}
console.log(max(1, 2, 3, 4, 55, 6, 7, 8, 9));// 55

例如以下运用,函数的作用是把字符串的首字母大写。

Js代码 

25.正则表达式:js中常用于表单验证。
  • 创建
    1.构造函数的方式:var regExp = new RegExp(/d/);
    2.正则字面量:var regExp = /d/;
    3.正则的使用:/d/.test("aaa1");

  • 普通字符:abc

  • 元字符:具有特殊意义的字符
    d: 数字
    D: 非数字
    w: 单词字符 a-zA-Z0-9_
    W: 非单词字符
    s: 不可见字符 空格 t n
    S: 可见字符
    . : 任意字符 (n)
    .: 匹配.
    |: 或 优先级最低
    (): 优先级最高的
    []: 一个字符的位置,里面是可以出现的字符
    [^] :^表示非
    ^表示开始
    $表示结束
    ^$ 表示精确的匹配
    *表示 出现0次或者0次以上
    + 表示 1次或者1次以上
    ?表示 0 次 或者 1次
    {n,m}美高梅手机游戏网站, 出现n次到m次 * {0,} + {1,} {0,1}
    {n,} 出现n次或者n次以上
    {n} 出现n次

  • 常见验证
    var phoneReg = /^0d{2,3}-d{7,8}$/;
    var qqReg = /^[1-9]d{4,11}$/;
    var mobileReg = /^1[345789]d{9}$/;
    var nameReg = /^[u4e00-u9fa5]{2,4}$/;
    var emailReg = /^w+@w+(.w+)+$/;

  • 正则的参数: /d/g :global 全局的 i: ignore:忽略大小写

  • 字符串替换

题1:var str = "   123AD  asadf   asadfasf  adf  ";
①.把所有 ad 换成 xx
str = str.replace(/ad/g, "xx");

②.把ad /AD /aD /Ad  都换成xx
str = str.replace(/ad/gi, "xx");

③.把str中所有的空格去掉
str = str.replace(/s/g, "");

题2:var str = "abc,efg,123,abc,123,a";
所有的逗号替换成 !
str = str.replace(/,/g, "!");

题3:var jsonStr = '[{"name":"张三",score:8},{"name":"张三",score:90},{"name":"张三",score:81}]';
把所有成绩都修改成100分
jsonStr = jsonStr.replace(/d{1,2}/g, "100");

字符串传匹配,匹配所有分数
var reg = /d{1,2}/g;
var arr = jsonStr.match(reg);
console.log(arr);

题4:var str = "大家好,我是xxx,我的手机号码是18511112222,我前女友的手机号码是13222221111,我的现女友的手机号码15555555555";

var reg = /1[345789]d{9}/g;
var arr = str.match(reg);
console.log(arr);

美高梅手机游戏网站 2


以下摘取的函数,在shared目录下公用的工具方法。文件在util.js中,githu地址。提取了一些常用通用的函数进行剖析,主要包含以下内容:

三、定义apply方法属性复制函数

Knowledge changes the mind

再多次调用capitalize时,从缓存对象中取值,命中,直接返回,无需再进行计算操作。

 

8.prototype:原型对象
    1. 所有的函数(构造函数)都会自带一个属性:prototype 这个属性的值是一个对象: 原型对象。
    2. 通过构造函数实例化的对象 可以直接访问prototype属性(原型对象)的属性和方法。
  • 构造函数中相同的属性和方法可以放入其对应的原型对象中。
    对象: 存储每个不一样值 (name, age , gender)
    原型:存储所有对象共同的东西(方法)

  • 所有的函数都会有一个属性:prototype 指向其 原型对象
    所有的对象都会有一个属性:_proto_ 指向当前对象的构造函数的 prototype 属性。
    所有的原型对象都会有一个属性:constructor 指向当前 构造函数

  • 属性搜索原则:
    如果自己有,用自己的,如果没有,找对象._proto_,如果还没有,一直往上找,知道Object.prototype,如果没有,undefined。

都是数组,则保证长度一致,同时调用every函数递归调用函数,保证每一项都一样是时间对象,则保证时间戳相同是对象,则先取出key组成的数组,两者key的个数要相同;再递归调用比较value值是否相同以上都不满足,直接返回false如果两者都不是对象,转成字符串后进行比较。以上都不满足,直接返回false

概述:Ext.js主要负责创建Ext全局对象,构建其命名空间,定义extend类继承方法,探测浏览器信息和对Javascript原生库进行扩展。

23.递归函数:函数内部直接或者间接的调用自己
    1. 函数直接或者间接自己调用自己
    2. 递归一定要有结束的条件(死递归)
  • 化归思想:

// 1.计算1-n之间所有数的和
function getSum(n) {
  if (n == 1) {
    return 1;
  }
  return getSum(n - 1) + n;
}
console.log(getSum(100));

// 2.计算斐波那契数列
var arr = [];
function fib(n) {
  if (n == 1 || n == 2) {
    return 1;
  }
  return fib(n - 1) + fib(n - 2);
}
console.log(fib(100));

var n1 = 1;
var n2 = 1;
var num = 0;
for (var i = 3; i <= 12; i++) {
  num = n1 + n2;
  n1 = n2;
  n2 = num;
}
console.log(num);
  • 递归实现深拷贝
  1. 递归判断一个对象是否和另个一个对象完全相同

Js代码 

6.拷贝:
  • 浅拷贝:将对象中所有的属性都依次赋值到新对象里面去。浅拷贝只复制了一层对象的属性
    如果对象中的属性还有对象,那浅拷贝只能复制该对象的地址,所以复制后该属性的对象和原属性的对象是同一个。

  • 深拷贝:判断原对象的属性值的数据类型是否为对象typeof obj[k] === 'object'
    利用递归 temp[k] = cloneObj(obj[k]); 实现。

先调用cached传入一个函数,这个函数是对字符串进行首字母大写的操作,并返回首字母大写的字符串结果,可以说创建了一个计算函数。

 美高梅手机游戏网站 3

→点我去看jQuery知识点整理

function isObject (obj){ return obj !== null  typeof obj === 'object'}function looseEqual (a, b) { // 如果是同一个对象,则相同 if (a === b) return true // 判断是否是对象 const isObjectA = isObject(a) const isObjectB = isObject(b) // 两者都是对象 if (isObjectA  isObjectB) { try { // 判断是否是数组 const isArrayA = Array.isArray(a) const isArrayB = Array.isArray(b) // 两者都是数组 if (isArrayA  isArrayB) { // 长度要一样,同时每一项都要相同,递归调用 return a.length === b.length  a.every((e, i) = { return looseEqual(e, b[i]) }) } else if (a instanceof Date  b instanceof Date) { // 如果都是时间对象,则需要保证时间戳相同 return a.getTime() === b.getTime() } else if (!isArrayA  !isArrayB) { // 两者都不是数组,则为对象 // 拿到两者的key值,存入数组 const keysA = Object.keys(a) const keysB = Object.keys(b) // 属性的个数要一样,递归的判断每一个值是否相同 return keysA.length === keysB.length  keysA.every(key = { return looseEqual(a[key], b[key]) }) } else { return false } } catch (e) { return false } } else if (!isObjectA  !isObjectB) { // 两者都不是对象 // 转成字符串后,值是否一致 return String(a) === String(b) } else { return false }}

 

13.函数进阶
  • 定义函数:

    • 1.函数声明:function fn(){}
      函数声明会提升,因此可以先调用,后声明
      函数声明:必须要有名字 ()里面只能出现表达式
      !function( ){ }( );等同于匿名函数自调用

    • 2.函数表达式:var fn = function() {}
      函数表达式只会将函数名提升,所以只能在赋值后调用函数

    • 3.构造函数的方式 function是复杂类型
      Object:内置构造函数,用来创建对象的
      Function:内置构造函数,用来创建函数的
      参数: arg1,arg2,arg3.....body

      1. 所有的参数都是字符串
      2. 前面可以指定任何多个形参,最后一个参数是代码体
    var fn1 = new Function("a1", "a2", "alert(a1+a2)");
    fn1(1,2);//3

同样利用高阶函数,在闭包内操作标识的真假,来控制执行一次。

 

12.继承:让一个对象可以使用另一个对象的属性和方法。
  • 混入式继承:(jQuery的extend继承)
var jQuery = {
  extend: function(temp) {
    for (var k in temp) {
      if(temp.hasOwnProperty(k)){
        this[k] = temp[k];
      }
    }
  }
}
var class = {
  addClass:function(){}
}
jQuery.extend(class)
  • 原型式继承:
    一个对象可以访问构造函数的原型中的属性和方法,那么如果想要让一个对象增加某些属性和方法,只需要把这些属性和方法放到原型对象中即可。
// 1.直接给原型增加属性和方法

// 2.原型替换(jQuery的原型替换)
jQuery.prototype = {
  constructor: jQuery,
  version: "1.0.0",
  extend: function(temp) {
    for (var k in temp) {
      if(temp.hasOwnProperty(k)){
        this[k] = temp[k];
      }
    }
  }
}


// 3.mixin+原型:不换原型,给原型混入
class = {
  addClass:function(){}
}
jQuery.prototype.extend = function(temp) {
  for (var k in temp) {
    if(temp.hasOwnProperty(k)){
      this[k] = temp[k];
    }
  }
}
jQuery.prototype.extend(class)
  • 经典继承:
    ES5提供了一个方法: Object.create(obj);
    返回值:一个新的对象
    参数: 一个对象,这个对象会成为新对象的原型对象
var lw = {
  money: 1000000,
  car: "劳斯莱斯"
}
var newObj = Object.create(lw);
  • 如何安全的扩展内置对象:
    需求:要给所有创建的数组增加一个方法,sayHi的方法
    注意:永远不要去修改内置对象。
function MyArray() {}
MyArray.prototype = new Array() / [空数组];
MyArray.prototype.push = function() {
  console.log("hehe");
}
var arr = new MyArray();
arr.push();
var arr2 = new Array();
console.log(arr2.push(1, 2, 3));
function remove (arr, item){ if (arr.length) { const index = arr.indexOf(item) if (index  -1) { return arr.splice(index, 1) } }}

 

5.数据类型:
  • 简单数据类型:值类型,存储的是值本身;
  • 复杂数据类型:引用类型,存储的是对象的地址,复制的地址,对象只有一个,两个变量指向同一个对象。

原始类型:String、Number、Boolean、Null、Undefined、Symbol对象类型:Object、Array、Function5. 判断是否是对象类型

 美高梅手机游戏网站 4

15.json:
  • 一种通过的数据交换的格式,就是一个字符串,只不过这个字符串有一定的规则。
    var json = '{"name": "zs", "age": 18, "sex": "男"}';

  • 把json字符串转换成js对象:
    var obj = JSON.parse(json);
    参数:json字符串
    返回值:js对象

  • 把js对象转换成json字符串:
    var json = JSON.stringify(obj);

  • eval也可以把一个json字符串转换成js对象(少用)
    var json = '{"name": "zs", "age": 18, "sex": "男"}';
    eval会把字符串当成js代码来解析
    var obj = eval("(" + json + ")"); //{}不止有对象的意思,还有代码块的意思

console.log(isFinite(Infinity)); // falseconsole.log(isFinite(-Infinity)); // falseconsole.log(isFinite(123)); // true
  1. // apply方法,把对象c中的属性复制到对象o中,支持默认属性defaults设置。这个方法属于对象属性的一个浅拷贝函数。  
  2. Ext.apply = function(o, c, defaults){  
  3.     if(defaults){  
  4.         // 如果默认值defaults存在,那么先把defaults上得属性复制给对象o  
  5.         Ext.apply(o, defaults);  
  6.     }  
  7.     if(o && c && typeof c == 'object'){  
  8.         for(var p in c){  
  9.             o[p] = c[p];  
  10.         }  
  11.     }  
  12.     return o;  
  13. };  
3.比较运算符:
  • == 的转换规则:
    1. NaN 不等于任何值 包括NaN本身
    2. null 不等于任何值, 除了null 和 undefined
    3. undefined不等于任何值, 除了undefined本身和null
    4. 如果两边有布尔类型, 两边都转换成数值类型比较 false:0 true:1
    5. 如果两边有数值类型, 两边都转换成数值类型。
    6. 如果两边没有数字和布尔类型,有字符串,都转换成字符串比较。
    7. 如果两边都是对象,比地址。
      Number( [ 空数组 ] )为 0 ;Number( { 空对象 } )为 NAN。

这个方法写的相对简单,如果更深入了解,可以戳此查看这篇文章

十、扩展原生Date

→点我去看js基础知识点整理

cached函数先定义一个没有原型的对象,会比用{}高效,因为不需要继承一大堆Object.prototype上的属性。

Js代码 

美高梅手机游戏网站 5

let test = Symbol('test');console.log(test.toString()); // "Symbol(test)"console.log(String(test)) // "Symbol(test)"

 美高梅手机游戏网站 6

21.预解析:
  • 1.函数优先,先提升函数,再提升变量
  • 2.如果有同名的变量,会直接忽略
  • 3.如果有同名的函数,会覆盖
const capitalize = cached((str) = { return str.charAt(0).toUpperCase() + str.slice(1)})

官方下载地址:

1.typeof:
  • 1.返回的是一个字符串;
  • 2.只能判断简单数据类型,复杂数据类型用instanceof
  • 3.是一个关键字,不是一个函数,()的作用:提升优先级;
  • 4.如果是一个函数,返回的是function,函数在js里是一等公民;
  • 5.如果是null,返回的是object。
  1. 删除数组中指定元素

 

4.严格模式:
  • 开启严格模式:’’use strict’’
    1.变量必须声明;
    2.禁止this指向window对象;
    3.禁用八进制。

并且用isFinite来判定一个数字是否是有限数

 美高梅手机游戏网站 7

7.对象:无序的键值对的集合。
  • 面向过程:员工,一步一步考虑做事的过程;
    面向对象:老板,让谁做什么事。
    面向对象是面向过程的封装,而不是替代。

  • 面向对象的三大特性:

    • 1.封装:
      函数:封装一段代码。
      对象: 把一些属性和函数封装到一个对象了。
    • 2.继承:
      拿来主义:一个对象没有这个属性或者方法,另一个对象有个这个属性或者方法,通过某些手段,能够直接用另一个对象的属性和方法。
    • 3.[多态]:js中没有,只有强类型语言有。
  • 创建对象的方式:

var obj = new Object();

var obj={}; // 字面量创建;

//工厂函数:每次调用,都会创建出来一个对象。
function createPhone(brand) {
  var obj = {
    brand: brand
  }
  return obj;
}
// 缺点:创建出来的对象全是object类型,无法区分。

/*构造函数:实例化对象
  1. 首字母大写
  2. 作用: 实例化对象(给this添加属性和方法)
  3. 配合new关键字使用,如不配合new,this指向window*/
function Phone(brand) {
  this.brand = brand;
}
// 缺点:内存浪费;改进:用原型'
var hw = new Phone("华为");
  • new关键字:
    1. 在内存开辟一块新的空间,创建一个空的对象
    2. 让构造函数的this指向这个新的对象
    3. 调用构造函数
    4. 返回新对象。

调用once函数后,会返回一个函数,赋值给test2第一次调用test2后,在函数的尼内部,called初次为false, 所以可以执行函数test,然后把标识called设置为true,就类似关闭了大门,下次不再执行。之后在调用test2,test将不再执行。12. 自定义bind函数

  1. // 创建Ext全局对象,大多数JS库为了避免和其他JS库命名冲突,都会把自己创建的类或函数封装到一个全局变量中去,  
  2. // 这样就相当于创造了自己的命名空间,可以算是一个单例模式。例如,jQuery就是全部都封装到$变量中去。  
  3. Ext = {version: '2.3.0'};  
2.逻辑运算符:
  • 逻辑中断:
    && : 找假值, 从左往右依次判断,如果某个操作数的逻辑是false,中断。
    || : 找真值, 从左右往右依次判断,如果某个操作的逻辑是true,中断。

  • 转换成布尔类型是false的几种情况:
    null undefined 0 NaN "" false

    • 补充:null 和 undefined

      • null 是一个表示“无”的对象,转为数值时为 0;undefined 是一个表示“无”的原始值,转为数值时是NaN

      • 当声明的变量还未被初始化时,变量的默认值为 undefined。null 用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

      • undefined 表示“缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
        1.变量被声明了,但没有赋值时,就等于 undefined
        2.调用函数时,应该提供的参数没有提供,该参数等于 undefined
        3.对象没有赋值的属性,该属性的值为 undefined
        4.函数没有返回值,默认返回 undefined

      • null 表示“没有对象”,即该处不应该有值。典型用法是:
        1.作为函数的参数,表示该函数的参数不是对象
        2.作为对象原型链的终点

  • 使用场景:

function animate(fn) {
  fn && fn(); //如果传参数函数就执行函数
}
animate();

传入的值排除掉null,因为在js中null使用运算符typeof得到的值是object,这是一个bug。因为历史原因放弃修复了。具体可以参考这里查看

 

11.沙箱:匿名函数自调用
  • 优点:不用担心全局变量污染的问题
    缺点:完全与外界隔绝
    对外暴露变量:传递window作为参数传入,window.变量=变量

一旦创建不能给这个对象添加任何属性。

  1. Ext.applyIf(Array.prototype, {  
  2.       
  3.     indexOf : function(o){  
  4.        for (var i = 0, len = this.length; i < len; i++){  
  5.           if(this[i] == o) return i;  
  6.        }  
  7.        return -1;  
  8.     },  
  9.   
  10.       
  11.     remove : function(o){  
  12.        var index = this.indexOf(o);  
  13.        if(index != -1){  
  14.            this.splice(index, 1);  
  15.        }  
  16.        return this;  
  17.     }  
  18. });  
14.eval的作用:
  • 将一段字符串当成代码来执行。eval("alert(1+2)");
  • 代码编辑器:
button.onclick = function() {
  var content = txt.value;
  eval(content);
}
  • eval 让一个json字符串转换成js对象。

第一次调用capitalize函数,先从缓存对象中取值,没有,则调用计算函数进行计算结果返回,同时存入缓存对象中。这时的缓存对象为:

 

20.字面量和变量

字面量(直接量):从字面的意思就能看出来类型和值 55 "abc" true [] {},浏览器能够直接显示字面量。
变量:可以变化的量, 必须要先声明,才能使用, 如果变量没有声明,浏览器不认识,就会报错。

先判断数组长度,如果数组是空的,则没必要进行删除操作

Js代码 

16.this的指向:
  • 函数:当一个函数不是一个对象的属性时,我们称之为函数。
    方法:当一个函数被保存为对象的一个属性时,我们称之为方法。

  • this:
    1.函数调用模式:this指向的是window
    2.方法调用模式:this指向调用当前方法的对象
    3.构造函数调用模式:如果函数是new调用的,此时this被绑定到创建出来的新对象上
    4.上下文调用模式:call、apply

    • Call:
      可以调用一个函数,并且可以指定这个函数的this指向
      第一个参数可以指定函数内部的this指向
      fn.call(thisArg, arg1, arg2, arg3);==fn(arg1, arg2, arg3)
    • Apply:
      apply()方法的作用和 call()方法类似,只有一个区别,就是apply()方法接受的是数组或者伪数组, 里面存放了所有的参数列表。而call()方法接受的是若干个参数的列表。
      apply有一个特性:平铺特性, apply会把数组里面的每一项都当成参数。
      fn.apply(thisArg, [arg1, arg2, arg3]);==fn(arg1, arg2, arg3)

    5.bind:创建一个新的函数, 可以绑定新的函数的this指向
    返回值:新的函数
    参数:新函数的this指向,当绑定了新函数的this指向后,无论使用何种调用模式,this都不会改变。
    var newFn = fn.bind(window);

编辑:美高梅游戏网站 本文来源:主要包含以下内容,浏览器能够直接显示字面量

关键词: