javascript笔记(Day01)

1、javascript函数不介意传进来多少参数及其类型,函数中的参数在内部是用一个参数数组表示的,在函数体内可以通过arguments对象来访问参数数组,并且arguments对象内的值永远与命名参数的值保持同步,长度由传入的参数确定,不是定义函数时的命名参数的个数决定的。
在严格模式中,若存在命名参数,arguments不能更改命名参数的值。

function sexAlert(name, sex){
    console.log(name + ' is a ' + sex);
}
function sexAlert(){
    console.log(arguments[0] + ' is a ' + arguments[1]);
}

2、数组赋值,索引大于原数组的长度时,会将数组的长度自动增加。

let arr = [1,2,3];
arr[99] = 100;
console.log(arr.length);//100

而在判断变量是不是数组时,instanceof适合单一全局执行环境。如果网页中存在两个框架(两个全局执行环境),将一个数组从一个框架传递到另一个时,ta和原生框架中创建的数组具有不同的构造函数。
对于这种情况,可以使用Array.isArray()方法。

if(Array.isArray(arr)){
    //进行某些操作
}

3、数组的迭代方法: every()和some(),foreach()和map(),filter(),传入三个参数,分别是数组每项的值,索引,数组本身。foreach()没有返回值,map()返回每次函数调用结果组成的数组。filter()对每一项运行函数,返回该函数会返回true的项所组成的数组。

const arr = [1,2,3,4,5,6,5,4,3,2,1];
//every
let everyResult = arr.every(function(item, index, array){
    return (item > 2);
});
console.log(everyResult);//false,每一项都满足条件才返回true
//some
let someResult = arr.some(function(item, index, array){
    return (item > 2);
});
console.log(someResult);//true,有一项满足条件就返回true
//filter
let filterResult = arr.filter(function(item, index, array){
    return (item > 2);
});
console.log(filterResult);//[3,4,5,6,5,4,3];
//map
let mapResult = arr.map(function(item, index, array){
    return item * 2;
});
console.log(mapResult);//[2,4,6,8,10,12,10,8,6,4,2];
//foreach
arr.foreach(function(item, index, array){
    //进行一些操作
});

4、缩小数组的函数reduce()和reduceRight()

const arr = [1,2,3,4,5];
let result1 = arr.reduce(function(prev, cur, index, array){
    return prev + cur;
});
console.log(result1);//15
let result2 = arr.reduceRight(function(prev, cur, index, array){
    return prev + cur;
});
console.log(result2);//15

5、函数申明和函数表达式的区别

console.log(myLoly());//sll
function myLoly(){
    return 'sll';
}
console.log(myYjm());//ReferenceError: myYjm is not defined
const myYjm = function(){
    return 'yjm';
};

6、callee与caller
callee是arguments对象的属性,指向拥有当前arguments对象的函数,
caller是函数的属性,保存着调用当前函数的函数的引用。可以使用arguments.callee,caller实现更松散的耦合。严格模式下,对函数的caller属性赋值会报错。

function outer(){
    inner();
}
function inner(){
    console.log(arguments.callee.caller);//outer函数
}
outer();

7、引用类型和基本包装类型的区别在于对象的生存周期。使用new操作符创建的引用类型的实例在执行环境退出当前作用域时才会被销毁,而基本包装类型只存在于一行代码的执行瞬间,这意味着我们不能在执行时为基本类型添加属性和方法。

let a = 'sll';
a,cty = 'zz';
console.log(a.cty);//undefined

而Object构造函数会根据传入值的类型返回相应的基本包装类型实例。

let a = new Object('sllzz');
console.log(a instanceof String);//true
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 第5章 引用类型 引用类型的值(对象)是引用类型的一个示例。在ECMAScript 中,引用类型是一种数据结构,用...
    力气强阅读 733评论 0 0
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 698评论 0 0
  • 陆游在沈园题写 《钗头凤》: 红酥手 黄滕酒 满城春色宫墙柳 东风恶 欢情薄 一怀愁绪 几年离索 错 错 错 春如...
    胡钧阅读 306评论 0 0
  • 今天没什么事,打算去妈家。同事在楼下分享他的康婷,耽误我的行程。后来我妈打过电话来,问我回家不?说...
    star卫星阅读 59评论 0 0