JavaScript-基本知识(四)

1.Array.isArray():

作用:判断某个对象是否是数组

判断对象的类型:typeof

基本数据类型:
typeof 字符串  string
typeof 数值    number
typeof true|false   Boolean
typeof null   object
typeof undefined   undefined

复杂数据类型:
typeof 对象   object
typeof 函数     function

兼容性写法:

if(typeof Array.isArray != "function"){
    Array.isArray = function(obj){
        return Object.prototype.toString.call(obj) == "[object Array]";
    }
}

toString():返回一个对象的字符串描述。

(1)如果是object类型,就直接返回[object Object];
(2)如果是函数或数组类型,就得用Object.prototype.toString.call(对象)来获取一个对象的字符串描述。

call():借用其它对象的方法。

2.基本包装类型

String Number Boolean

作用:通过基本包装类型得到的对象可以调用方法和访问属性。

[object String]、[object Number]、[object Boolean]

  1. 基本包装类型对象的创建:

    · new String()|Number()|Boolean()

    · new Object() 参数(字符串|数值|布尔值)

    · Object()

注意:

(1) String():把对象的值转换成字符串

(2) 比较(==|===) 注意==左右两边的类型是否相同,如果不同那么可能存在隐式的类型转换

eg: var str1 = new String("demo01");
var str2 = "demo01";

console.log(str1.toString());    //demo01
console.log(str1 == str2);      //true(str1会先隐式的(通过toString()方法)转换为字符串,然后再跟str2比较)

(3) 基本包装类型的数据(基本类型的值),在访问属性或者是调用方法的时候,系统内部会先创建一个相对应的对象。通过这个对象来访问属性|调用方法,得到结果之后返回,然后直接销毁这个临时对象

eg:var tmpStr = new String("demo01");
   var result = tmpStr.length;
   str2.length = result;
   tmpStr = null;

Number使用注意:

扩展Number
1.变量.方法;2.(数值).方法;

(数值):表达式

不能用数值.方法

3.Object.prototype详解:

(1)constructor 构造器属性

原型对象 与之相关联的构造函数(实例属性|原型属性)

对象 创建该对象的构造函数

(2)hasOwnProperty

作用:检测是否有某个指定的属性(不包含原型属性)

对象.hasOwnProperty("属性")

(3)isPrototypeOf|Object.getprototypeOf(对象)

作用:判断某个对象是否是指定对象的原型对象

注意点:在判断的时候会判断整条原型链

(4)prototypeIsEnumerable

作用:检查某个属性是否是可以枚举(列举)for...in
一般情况下属性都是可以枚举的,也可以自己设置成不可以枚举

(5)toString()

作用:返回一个对于该对象的字符串描述

Object类型的对象 var o = {} 返回的是[object Object]

其它类型的对象:数组|函数|String 返回字符串描述

注意点:和Number类型使用的时候,可以接受参数(几进制)

eg:var num = new Number(12);
   console.log(num.toString(2));  //num的二进制:1100

(6)toLocalString

大部分情况同toString,会做本地化处理

(7)valueOf

作用:获得对象的值

  • 基本包装类型的对象(String|Number|Boolean) 返回其对应的基本类型值

  • 其它对象 返回的是对象本身

  • 日期对象 Date 返回的是一个时间戳(1970)

4.静态成员和实例成员以及原型成员

  • 静态成员:直接添加在构造函数上面的属性和方法。

  • 实例成员:构造函数创建的实例对象上面的属性和方法。

  • 原型成员:构造函数的原型对象上面的属性和方法。

5.Object的静态成员

(1)Object.apply

作用:借用其他对象的方法

用法: 对象.方法.apply(this绑定的对象,[参数1,参数2])

(2)Object.arguments

作用:函数每部的一个隐藏参数,这个隐藏参数用来接收实参。

它本身是一个类似于数组的结构,可以像数组一样通过下标来操作数据。但不是数组类型。

(3)Object.assign

作用:拷贝对象的属性,多个属性。

(4)Object.bind

该方法的作用同call|apply差不多。

(5)Obect.call

作用:借用其他对象的方法。

用法:对象.方法.call(this绑定的对象,参数1,参数2)

(6)Object.caller

作用:指向调用当前函数的函数。

(7)Object.create

作用:创建对象,设置原型对象。

(8)Object.getOwnPropertyDescriptor

作用:获得某个对象实例属性的描述信息

描述对象:

1 是否可以配置   configurable

    如果是true,该属性可以被删除,且configurable可以设置为false;
    如果是false,该属性不可以被删除,且configurable不可以再被设置为true。

2 是否可以枚举    enumerable

    如果是true,那么在使用for...in循环遍历对象的时候可以列举出来,否则不能列举。

3 是否可以重写   writable

    修改某个属性的值
4 具体的值     value

(9) Object.getOwnPropertyDescriptors

作用:获取多个对象实例属性的描述信息。

(10)Object.defineProperty

作用:设置对象中某个属性的描述信息

(11)Object.getOwnPropertyNames

作用:返回对象中所有实例属性的名称数组

关于是否可以枚举,不论是否可以被枚举都会返回

(12)Object.keys

作用:返回对象中所有实例属性的名称数组,只返回可以被枚举的属性

(13)Object.getPrototypeOf

作用:获得某个对象的原型对象

(14)Object.preventExtensions

作用:禁止扩展对象 不能添加任何的属性和方法

(15)Object.seal

作用:密封(封闭)对象

特点:不能够扩展对象,也不能删除对象的属性

(16)Object.freeze

作用:冻结对象

特点: 不能够扩展对象,也不能删除对象的属性,不能修改

6. 函数的创建方式

  • 函数的声明
    function 函数名称(参数1,参数2...){函数体}

  • 函数表达式

    var 变量名 = function[函数名可以省略](){函数体}

    若函数有名称,那么就是命名函数表达式

    若函数没有名称,就是匿名函数表达式

  • 使用Function构造函数来创建

    var 变量名 = new Function(参数);

    1. 使用构造函数创建对象,参数类型为字符串

    2. 参数说明:

      • 如果没有参数:就是一个空的函数

      • 如果有一个参数,那么这个参数就作为新创建出来的函数的函数体

      • 如果有多个参数,那么最后一个参数作为函数的函数体,前面的参数全部都是形式参数

7.函数内部有两个隐藏的参数

1. arguments:类似数组的结构([object Arguments]),用来接收实参

    1 实参的数量小于形参的数量  不足的为undefined
    2 实参的数量大于形参的数量  超出的部分会忽略  在函数内部要获得超出的部分,用arguments


2. this永远都指向一个对象(非严格模式下)

01 以普通函数方式调用        this->window
02 以对象的方法来调用        this->对象
03 new 构造函数的方式调用    this->指向内部新创建的对象
04 函数上下文的方式来调用(call|apply)  this->绑定的第一个参数,如果不传递参数,那么默认指向window 

3. length属性

    arguments.length   实际参数的长度
    函数名.length       形式参数的长度

8.with

作用:把对象的作用域延伸到{}中,主要用于缩减代码 (对象.属性.属性.属性),在{}中可以通过无前缀的方式来设置属性的值。

注意点:

01 this指向window

02 如果是添加属性,那么必须要使用前缀

03 严格模式下被禁止使用

你可能感兴趣的:(JavaScript-基本知识(四))