1.arguments对象介绍
arguments 凡是函数调用,默认含有一个 arguments 对象
,可以将其看成一个‘数组’。里面存储调用时传入的所有参数,
可以使用数组的索引访问这些参数。
演示代码:
function sum () {
// 所有的参数都会存储到 arguments 中
var sum = 0;
for ( var i = 0; i < arguments.length; i++ ) {
sum += arguments[ i ];
}
return sum;
注意:函数名.length,即函数的length属性,表示 定义函数时,参数的个数。
2.函数的引用(callee) 与 (caller)
js 中函数也是对象
2.1 callee 在函数内部,他表示 当前函数的引用。
2.2 caller caller 表示调用函数的
调用函数方法:
arguments.callee:
//实现递归调用
function fn() {
arguments.callee(); // 使用 callee 来递归
}
fn();
//为什么使用 arguments.callee 调用递归呢
// js 是一个弱类型的语言, 可以随意赋值
function f() {
console.log( 'Hello JS' );
}
f = 0; // 赋值
console.log( f );
// /*2. caller 拜师调用函数*/
// 在函数 f1 中 调用 函数 f2
// function f1 () {
// f2();
// }
// f1();
// f1 就是称为调用者. 调用的发起人.
// f2 就是被调用者
// caller 就是在被调用函数中, 获得调用函数的引用
// 语法: 函数名.caller
function f2 () {
console.log( f2.caller );//指的是调用者是谁,这里指的是 itcast
}
function itcast() {
f2();
}
itcast();
3.eval()函数
功能:动态的执行代码
eval 函数与 Function 功能类似。
eval 可以直接将字符串作为代码来执行
// 可以直接调用 eval 函数, 来实现字符串代码
eval( 'var num = 123;' );
eval( 'console.log( num );' );
alert( num );
3.1 function 与 eval 的区别
在 eval 函数中, 使用字符串声明的变量, 在 eval 函数外面可以立即使用
Function 是用来生成函数中的, 所以如果要执行, 需要调用;
如果函数要立马执行
// (function () {
// alert ( '立即执行函数' );
// })();
// // 又称作 自调用函数
4、json对象的介绍
// json 格式( 严格的国际通用数据表示协议, 结构 )
// 在 js 中使用的 json 对象, 相对较松散
// json 格式 有两种结构
// 1: {}
// 2: []
// 注意: json 格式中, 键名也必须使用双引号括起来.
4.1将字符串变成对象, 有三种做法
var data = '[ { "name": "张三", "age": 19, "gender": "男"}, { "name": "李四", "age": 18, "gender": "女"} ]';
// 1. eval 做法
var o1 = eval( "(" + data + ")" ); // 注意一个习惯. 就是数据两端一般加上圆括号为好
// 2. Function 做法
var o2 = (new Function( 'return ' + data ))();
// 3. 使用 ES5 中引入的标准处理 JSON 的语法
// JSON.parse( )
// 注意: 字符串必须是严格是 json 格式
var o3 = JSON.parse( data );
将数组转化成 字符串
var arr = [1,2,3, { a : 1 } ];
JSON.stringify( arr );
字符串解析成 JSON
var str = '[1,2,3,{"a":1}]';
JSON.parse( str );
5.instanceof 用法
<script>
// instanceof 语法
// boolean 对象 instanceof 构造函数
// 判断该对象是否为 构造函数 的 实例 错误
function Person () {}
var p1 = new Person(); // 按照原有的原型结构来创建
// p1 -> 原来的 Person.prototype -> Object.prototype -> null
// 设置原型
Person.prototype = {};
// var p1 = new Person(); // p1 -> 新的 Person.prototype. 即 {} -> Object.prototype -> null
console.log( p1 instanceof Person ); // 就在判断 {} 是否在 p1 的原型链上
// 判断 构造函数的 原型属性 是否在对象的原型链上
</script>