早期整理的js知识点

I javascript数据类型

一、六种数据类型

五种基本类型(原始类型):

  1. Number
  2. String
  3. Boolean
  4. Null
  5. Undefined

一种对象类型

  • Object(Function,Array,Date...)

二、隐式转换

巧用‘+’ 和 ‘-’隐式转换规则

  • 最常用且容易疑惑的是加法运算,除了算数意义,还表示字符串拼接:
    var a = 'The answer is ' + 47;//The answer is 47
    '37' + 7 = 377
    '37' - 7 = 30 //把字符串转换成数值类型

'=='等于,类型不同时,尝试类型转换和比较

  • ‘1.23’ == 1.23 //string转number
  • 0 == false// boolean转number
  • null == undefined
  • new Object() == new Object()
  • [1,2] == [1,2]
  • object == number | string //尝试对象转为基本类型
  • 其他false

'==='全等于

  • 类型不同,返回false
  • 类型相同
    NaN != NaN
    new Object == new Object
    null === null
    undefined ===undefined

三、包装对象

临时性的对象,用完即时删除,设置属性时访问不到。


基本类型的包装对象

四、类型检测

常用类型检测方法:

  1. typeof:适用于检测基本类型


    typeof
  2. instanceof:适用于检测对象的类型,值得注意到是,不同window或iframe间的对象类型检测不能用instanceof


    instanceof
  3. Object.prototype.toString:


    Object.prototype.toString

类型检测小结:

II javascript表达式和运算符

1.表达式

表达式是指能计算出值的任何可用程序单元 --Wiki
表达式是一种js短语,可以使js解释器用来产生一个值。--《Js权威指南》

1.1 原始表达式

  • 常量,直接量:3.14,“test”
  • 关键字:null,this,true
  • 变量:i,j,k

1.2 数组,对象的初始化表达式

  • [1,2]
    new Array(1,2)
  • [1,,,4]
    [1,undefined,undefined,4]
  • {x:1,y:2}
    var o =new Object();o.x=1;o.y=2;

1.3 函数表达式

  • var fe = function(){};
  • (function(){console.log("hello world!");})();
  • function add(){};

1.4 属性访问表达式

  • var o = {x:1}
    o.x
    o['x']

1.5 调用表达式

  • funcName()

1.6 对象创建表达式

  • new Func(1,2);
  • new Object;

2.运算符

2.1 常用运算符

常用运算符

2.2 特殊运算符

特殊运算符

2.3 运算优先级

运算优先级

III javascript语句和严格模式

1.语句(statement)

  • block,break,continue,empty,if...else,switch,try catch
  • var,function,return,do...while,for,for..in,while
  • debugger,label,with

2.块(block)

快语句常用于组合0~多个语句。块语句用一对{}定义,但是没有块级作用域,有函数作用域

有函数作用域


有函数作用域

没有块级作用域


没有块级作用域

3.严格模式(use strict)

严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,并增强安全性。


严格模式

IV javascript对象

1.概述

对象中包含一系列属性,这些属性使无序的。每个属性都有一个字符串key和对应的value:
var obj = {x:1,y:2};
obj.x = 1;
obj.y = 2;

2.对象的结构

2.1 结构图解:

对象obj是函数foo的一个实例(var obj = new foo()),而函数foo的原型上定义了一个属性z(foo.prototype.z = 3),对象obj除了自身的x,y属性外,还继承了z属性,那是因为对象obj内部的[[prototype]]属性(指针)指向函数foo的原型,在查找对象属性时查找到了z属性。之外它还拥有[[class]],[[extensible]]等对象标签和writable,enumerable等属性标签。


对象的结构

2.2 对象创建

  1. 对象字面量
    var obj1 = {x:1,y:2}
    var obj2 = {
    x:1,
    y:2,
    o:{
    z:3,
    n:4
          }
    };
  1. new Object
    new Object

    new Object2
  2. Object.create


    Object.create

2.3 属性操作

  1. 属性读写


    属性读写
  1. 属性删除


    属性删除
  2. 属性检测
    属性检测

    属性检测
  3. 属性枚举


    属性枚举

3.getter setter

3.1 get/set 关键字定义方法

3.2 一些复杂的应用,检测输入是否合法

3.3 get/set与原型链的关系

当尝试去修改位于原型上的属性时,如果是一般属性,则可以在对象内部创建新值以修改。如果要修改的属性含有get关键字,那么就不能修改。要想尝试去修改的话,可以调用Object的定义属性方法。



同样的,如果尝试修改原型上的属性是只读的(writable=false,默认是false),也不能直接修改。还是要用Object.defineProperty()方法去修改。


4.属性标签

4.1 定义属性

方法getOwnPropertyDescripor(对象,’属性名‘)(标签属性访问器)用于获取属性的标签。该方法以键值对形式返回一个对象。
方法defineProperty(对象,‘属性’,{标签:值})自定义属性的配置信息。



方法keys(对象)枚举对象上的属性,对于设置了不可枚举(enumerable:false)的属性不枚举出来。


4.2 定义多个属性

方法defineProperties(对象,{
属性1:{value:"",标签:值},
属性2:{value:"",标签:值}
})定义多个属性。



结合get/set方法定义属性



属性权限对照表

5.对象标签

5.1对象原型标签指向对应的原型(原型链的形成)

5.2 表示对象的类别(属于哪类引用类型)

5.3 扩展性标签(对标签进行修改)

6.序列化和其它对象方法

6.1把对象序列化为JSON数据和解析json数据

值为undefined的属性序列化时不显示,值为NaN或Infinity的属性会转换成null,new Date()会被转换为UTC。


6.2自定义序列化方法toJSON:function(){}

6.3 其它对象方法

V javascript数组(Array)

1 创建数组、数组操作

  1. js中数组是弱类型的,数组中的每一项可以保存任何类型的数据
    var arr = [1,true,null,undefined,{x:1},[1,2.3]];
  • js中数组的大小是动态可调整的,可以随着数据的添加自动增长
    var arr = [1,2,3,4,5];
    arr[5] = 6; // 增加第5项
    arr.length //6 自动增长,也可以动态修改
    arr[2]; //3 访问数组第2项
  • 创建数组-使用Array构造函数
    var arr = new Array();
    var arr = new Array(20); //如果是数值,指定长度;如果是其它类型,则创建包含这个值的只有一项的数组
    var arr = new Array(“red”,“blue”,“orange”,“black”); //指定元素
    var arr = Array(); //可以省略new关键字
  • 创建数组-数组字面量表示法(不会调用Array构造函数)
    var arr = [1,2,3,4];
    var arr = []; //空数组
  • 检测数组
    if(Array.isArray( 要检测的数组 )){//对数组执行操作}
  • 转换方法
    var arr = ['a','b','c'];
    arr.toString(); //拼接成一个以逗号分隔的字符串 a,b,c
    arr.valueOf(); //返回原数组
    alert(arr); //同toString(),会在后台调用toString()方法
    arr.join(','); //a,b,c
    arr.join('|'); //a|b|c
    如果数组中的某一项的值是null或undefined,该值在join(),toString(),toLocaleString()和valueOf()方法的返回结果中以空字符串显示

2 数组方法

  1. 栈方法(后进先出-向后推入push(),末尾取出pop())
    var arr = new Array();
    arr.push('NBA','AT&T'); // 推入2项
    arr.pop(); // 取得最后一项 'AT&T'
  1. 队列方法(先进先出-向前推入unshift(),前端取出shift())
    var arr =new Array(1,2,3);
    arr.unshift('num'); //在前端添加一项
    arr.shift(); //取得第一项
  2. 重排序方法(升序排序sort(),反转排序reverse())
    sort() 方法会调用每个数组项的toString()转型方法,比较的是字符串。所以不是最佳方案
    创建比较函数:
    function compare1(v1,v2) {
    if (v1 < v2) {
    return -1;
    }else if (v1 > v2) {
    return 1;
    }else{
    return 0;
    }
    };
    //对于数值类型的比较方法
    function compare2(v1,v2) {
    return v2 - v1;
    };
    var arr = [0,1,10,5];
    arr.sort(compare1);//会得到正确的数值排序0,1,5,10
  3. 数组迭代


  4. 二维数组


  5. Array.prototype.concat()


  6. Array.prototype.slice()


  7. Array.prototype.splice()


  8. Array.prototype.forEach()


  9. Array.prototype.map()


  10. Array.prototype.filter()


  11. Array.prototype.every&some()


  12. Array.prototype.reduce&reduceRight()


  13. Array.prototype.indexOf&lastIndexOf()


你可能感兴趣的:(早期整理的js知识点)