JavaScript中的基本包装类型及函数的介绍
一.基本包装类型(三种)
1.Array.isArray()方法:
作用:判断某个对象是否是数组
判断对象的类型: typeof
==基本数据类型:==
- typeof 字符串 string
- typeof 数字 number
- typeof true|false boolean
- typeof null object
- typeof undefined undefined
==复杂数据类型==
- typeof 对象 object
- typeof 函数 function
Array.isArray()方法的实例:
eg:
2.基本包装类型种类:
- String
- Number
- Boolean
==基本包装类型注意点:==
(1).基本包装类型的创建:
- 01 new String |Number | Boolean()
- 02 new Object() 参数(字符串|数值|布尔值)
- 03 Object ()
eg:
(2).比较(== | ===)的时候注意:
注意==先判断左右两边的类型是否相同,如果不同,那么可能存在隐式的类型转换基本包装类型的数据(基本类型的值),在访问属性或者是调用方法的时候,系统内部会先创建一个相对应的临时对象,通过这个对象来访问属性|调用方法,得到结果之后返回,然后直接销毁这个临时对象.
eg:
补充:
++String()方法:++ 是把对象的值转换成字符串.
++Number的使用注意:++
需求:为所有的数值对象都添加一个方法(sum),在调用的时候内部使用当前的值和参数相加,并且返回
注意点: 扩展Number
01 变量.方法 成功
02 (数值).方法 成功 表达式
03 数值.方法 报错
eg:
==3.原型链的绘图==
eg:
二.Object.prototype详解
(1)Object.prototype详解:
01 constructor 构造器属性
- 原型对象 与之相关联的构造函数(实例属性|原型属性)
- 对象 创建该对象的构造函数
- 原型对象中的constructor属性指向的是对应的构造函数;实例对象中的constructor指向对应的构造函数,其中这里的constructor就是从原型中获取的.即:constructor是实例对象的原型对象的属性,而非实例属性
02 hasOwnProperty
- 检测是否有某个指定的属性(不包含原型属性)
- 对象.hasOwnProperty('属性)
03 isPrototypeOf | Object.getPrototypeOf (对象)
- 判断某个对象是否是指定对象的原型对象
eg:obj.isPrototypeOf(p1) - 注意点:在判断的时候会判断整条原型链
- isPrototypeOf: 是否是某个对象的原型对象
04 propertyIsEnumerable
- 检查某个属性是否可以枚举(列举) for...in
- 属性是可枚举|不可以枚举(自己设置)
05 toString()
作用:该方法返回一个对于该对象的字符串描述
- Object类型的对象 var o = {} 返回的是[object Object]
- 其他类型的对象: 数组|函数|String 返回的是字符串描述
- 注意点:和Number类型使用的时候,可以接受参数(几进制)
06 toLocalString
大部分情况同toString 会做本地化处理
07 valueOf
作用:获得对象的值
001 基本包装类型的对象(String |Number|Boolean),那么返回其对应的基本类型值
002 其他对象 返回的是对象本身
-
003 日期类型 Date 返回的是一个时间戳(1970).
eg:
(2).静态成员和实例成员:
静态成员:因为构造函数本身是函数,函数本质是对象,对象可以拥有属性和方法
直接添加在构造函数身上的属性和方法
实例成员:
构造函数创建的实例对象上面的属性和方法
原型成员:
构造函数的原型对象上面的属性和方法
eg:
(3).Object的静态成员的详解:
==静态成员:==
01 Object.apply
作用:借用其他对象的方法
用法:对象.方法.apply(this绑定的对象,[参数1,参数2])
02 Object.arguments
函数内部的一个隐藏参数,这个隐藏参数用来接收实参的
它本身是一个类似于数组的结构,但是并不是数组,他可以想数组一样通过下标操作数据
03 Object.assign
作用:拷贝对象的属性,多个对象,但是不拷贝其原型对象,将返回目标对象
04 Object.bind
该方法的作用同call|apply差不多
05 Object.call
作用:借用其他对象的方法
用法:对象.方法.call(this绑定的对象,参数1,参数2)
06 Object.caller
指向调用当前函数的函数
07 Object.create
创建对象,并设置原型对象
08 Object,getOwnPropertyDescriptor
作用:获得某个属性的实例属性的描述信息(对象)
描述对象:
01是否可以配置 configurable
如果是true该属性可以被删除,且configurable可以被设置为false如果是false该属性不可以被删除,且configurable不可以再被设置为true02 是否可以枚举 enumerable
如果是true,那么在使用for...in循环遍历对象的时候可以列举出来,否则不可以列举03 是否可以重写 writable
修改这个属性的值04 具体的值 value
09 Object.getOwnPropertyDescriptors
作用:多个属性的描述信息(对象)
10 Object.definedProperty
作用:设置对象中的某个属性的描述信息(对象)
11.Object.getOwnPropertyNames
返回对象中所有实例属性的名称数组
关于是否可以枚举 不论是否可以被枚举都会返回
12.Object.keys
返回对象中所有实例属性的名称数组 只返回可以被枚举的属性
13.Object.getPrototypeOf
获得某个对象的原型对象
14.Object.preventExtensions
作用:禁止扩展对象 不能添加任何的属性和方法
15.Object.seal
作用:密封(封闭对象)
特征:不能够扩展对象 也不能删除对象的属性
16.Object.freeze
作用:冻结对象
特征:不能够扩展对象,也不能删除对象,也不能修改对象
eg:
三.函数的介绍
1. 函数的创建方法(3种):
(1).函数的声明
格式: function 函数的名称(参数1,参数2....){函数体}
(2).函数的表达式
格式: var 变量名 = function [函数可以省略](){函数体}
- 如果有函数名称,那么就是命名函数表达式
- 如果函数名称省略,那么就是匿名函数表达式
(3).使用Function构造函数来创建
格式: var 变量名 = new Function(参数)
2. 使用构造函数创建对象 参数:
类型:字符串 转义字符 \ 加在 '之前
参数说明:
如果没有参数:那么就是一个空函数
如果有一个参数:那么这个参数就作为新创建出来的函数的函数体
如果有多个参数:那么最后一个参数作为函数的函数体,前面的参数全部都是形参
3. 处理参数过长问题(三种方式)
001 + 拼接
002 模板
003 `` ESC下面这个键
eg:
//002 模板
#使用新特性来处理
4.arguments和length的用法
函数内部有两个隐藏的参数:arguments和length
- ==arguments==:类似于数组的结构(不是数组),用来接收实参
- 01 实参的数量小于形参的数量 不足的为undefined
- 02 实参的数量大于形参的数量 超出的部分会忽略在函数内部要获得超出的部分,利用arguments来获取;
- ==length属性==:
arguments.length 实际参数的长度
-
函数名.length 形式参数的长度
eg:
5.callee和caller的使用说明
==callee :==指向的是函数自己,主要用于匿名函数的递归操作
==caller :==指向的是调用当前函数的函数 补充说明:如果直接调用函数,那么指向的并不是window而是null;
==递归:==
01自己调用自己
-
02 要有结束条件
eg: 0~1 0 + 1; 0~2 0 + 1 + 2; 0~3 0 + 1 + 2 + 3; 0~4 0 + 1 + 2 + 3 + 4; 0~N 转换为 0~(N-1) + N
6.Function的应用(去重和求最大值)
eg:
01 数组去重
02 求取最大值
7.eval的简单的用法
eval: 把字符串转换js的代码,并且(马上执行)
-
Function: 把字符串转化为js的代码并且(函数调用的时候)执行
eg:
注意点:
使用eval来转换json--->对象
方法:
01 在前面拼接一个对象声明
02 把json字符串包装成一个表达式
==补充:JSON转换(eval)==
JSON:一种通用的轻量级的数据结构,用来表示数据|传输数据
XML:体积大
JSON数据和字面量对象的对比:
01 json本质上是字符串,是一种有格式的字符串
标准的json它的key要求加双引号,json没有方法(函数)02 js中的对象是Object类型
JSON解析操作:
01 把JSON字符串转换为js的对象
02 把对象转换为JSON字符串
eg:
8.Function.prototype原型链
- 001 Function.prototype ==>空函数
- 002 Function.constructor = Function
- 003 Function.proto == Function.prototype ==>空函数
- 004 空函数.proto.proto == Object.prototype
==Function和Object关系:==
互为对方的实例对象,全部都是true
eg:
9.私有变量和私有函数
私有变量和函数:
定义在构造函数内部而被this对象访问的变量,在外部无法访问到的变量和函数
公有变量和方法:
对外暴露接口,可以通过构造函数对象创建的对象访问的属性和方法
eg:
eg2:
10.with的简单说明
==with作用:== 把对象的作用域延伸到{}中,主要用于缩减代码 对象.属性.属性.属性
在{}中可以通过无前缀的方式来设置属性的值
注意点:
01this指向window
02 如果是添加属性,那么必须要使用前缀
-
03 严格模式下被禁止使用
eg: