javascript 基础集锦(一)
2017-01-16 16:07:08 0 举报
AI智能生成
这是一份关于JavaScript基础知识的集锦,涵盖了一些重要的基本概念和技巧。内容包括但不限于:数据类型、变量、运算符、条件语句、循环结构、函数、数组、对象等。此外,还介绍了如何使用DOM操作网页元素、事件处理、Ajax异步请求等实用技术。这份集锦适合初学者入门学习,也可以帮助有经验的开发者巩固基础知识并提升编程能力。通过阅读这份集锦,你将能够更好地理解和运用JavaScript语言,为编写高质量的Web应用程序打下坚实的基础。
作者其他创作
大纲/内容
apply,call,bind的区别
var m = {
"x" : 1
};
function foo(y) {
console.log(this.x + y);
}
foo.apply(m, [5]);
foo.call(m, 5);
var foo1 = foo.bind(m, 5);
foo1();
VM2556:5 6
VM2556:5 6
VM2556:5 6
/***********************/
/***********************/
无论apply还是call,都是立马调用对应的函数,
而bind会生成一个新的函数,bind的参数和call的参数
一毛一样。bind生成新的函数返回后,你想什么时候调用就什么
时候调用
而bind会生成一个新的函数,bind的参数和call的参数
一毛一样。bind生成新的函数返回后,你想什么时候调用就什么
时候调用
function a(xx) {
this.b = xx;
}
var o = {};
a.apply(o, [5]);
console.log(a.b); // undefined
console.info(o.b); // 5
VM2557:6 undefined
VM2557:7 5
apply()接收两个参数,第一个是绑定给this的值,
第二个是参数数组,注意是一个数组
第二个是参数数组,注意是一个数组
function a(xx, yy) {
console.log(xx, yy);
console.log(this);
console.log(arguments);
}
a.apply(null, [5, 55]);
a.call(null, 5, 55);
call()也接收两个参数,第一个和apply一样,
第二个参数不是一个数组,就像平常传的参数,一个一个传
第二个参数不是一个数组,就像平常传的参数,一个一个传
排序算法
1.比较对象的某个属性用sort方法进行升序排序,
sort方法如果不传一个参数就按字符排序,
如果传参数,则必须传一个函数,并返回数字
然后可以用reverse进行逆序,就可以实现从大到小了
sort方法如果不传一个参数就按字符排序,
如果传参数,则必须传一个函数,并返回数字
然后可以用reverse进行逆序,就可以实现从大到小了
var arr = [
{age:8},
{age:7},
{age:2},
{age:5},
{age:4}
];
function compare(property){
return function(a,b){
var first = a[property];
var second = b[property];
return first-second;
}
}
console.log(arr.sort(compare("age")));
2、冒泡排序
function bubbleSort(arr){
for(var i=1;i<arr.length;i++){ //比较数组长度减一次,每一次比较都会找出一个最大的泡
for(var j=0;j<arr.length-i;j++){
var temp;
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
bubbleSort([8,7,2,5,4]);
[2, 4, 5, 7, 8]
http://www.108js.com/article/article5/50138.html?id=2818
this
http://www.108js.com/article/article1/10405.html?id=2784
总结,没有函数嵌套的时候,有点的时候就点前面的对象就是this,
有函数嵌套时,看清楚最后一层调用的时候是谁,this就是谁
总结,没有函数嵌套的时候,有点的时候就点前面的对象就是this,
有函数嵌套时,看清楚最后一层调用的时候是谁,this就是谁
10、最常用的定义类
http://www.108js.com/article/article1/10026.html?id=66
11、prototype
http://www.108js.com/article/article1/10033.html?id=170
prototype的来龙去脉
总结:构造函数其实就是函数名字,new 函数名会创建一个对象,这是js模仿java,c++的
prototype的来龙去脉
总结:构造函数其实就是函数名字,new 函数名会创建一个对象,这是js模仿java,c++的
1.==与===
‘’是长度为0的字符串,console.log(0=='');打印为true;大多情况下我们都用
null,undefined仅在是否传参数时使用
==是假等于,===是强制等于,==是判断值是否等于,===是判断值和数据类型是否都等于
NaN不等于任何东西,包括他自己
NaN不等于任何东西,包括他自己
浮点数比较只能用减法取
绝对值看小于某个值就算相等
绝对值看小于某个值就算相等
(3)这里需要加以区分,undefined表示没有赋值的基本数据类型;null表示没有赋值的引用数据类型。
(4)null是处理引用的,它在堆中,而undefined是处理原始值的,它在栈中。
(5)null表示没有对象,就是说该处不应该有值,
(6)undefined表示缺少值,就是此处应该有一个值,但是还没有定义。
(7)这里要强调一点的是,null参与数据运算时其值会自动转换为0,而undefined参与时其结果一定是NaN
null是指什么都没有的对象类型,undeifined是指什么都没有的基本数据类型,0是数字类型‘’是长度为0的字符串,console.log(0=='');打印为true;大多情况下我们都用
null,undefined仅在是否传参数时使用
ES6的字符串模板有一个功能和字符串拼接是一样的。
字符串是不可修改的,就算修改也是没有任何效果的。
js提供很多字符串操作的方法,但最后都是返回被操作的字符串,
字符串本身没有任何改变
js提供很多字符串操作的方法,但最后都是返回被操作的字符串,
字符串本身没有任何改变
indexOf是返回括号里字符串的开始下标,
substring是截取字符串,返回截取的字符串,第一个参数开始,第二个参数为共多少个字符
substring是截取字符串,返回截取的字符串,第一个参数开始,第二个参数为共多少个字符
1.数组的长度通过.length();方法来获取
2.改变arr.length同时会改变数组
3.不像字符串,通过数组下标可以修改数组本身
注:最好不要通过改变数组的长度来改变数组,尽量控制操作数组的时候在数组长度以内
2.改变arr.length同时会改变数组
3.不像字符串,通过数组下标可以修改数组本身
注:最好不要通过改变数组的长度来改变数组,尽量控制操作数组的时候在数组长度以内
二、array操作的方法
1、slice类似于字符串的substring的作用,左闭合右不闭合
2、slice如果不传参数,有复制数组的作用。
2、slice如果不传参数,有复制数组的作用。
1、push往数组追加元素
2、pop删除数组最后一个元素,pop完之后继续pop不会报错,只会返回undefined
2、pop删除数组最后一个元素,pop完之后继续pop不会报错,只会返回undefined
1、unshift往数组前面插入元素
2、shift删除元素的第一个元素,shift完之后继续shift不会 报错,只会返回undefined
2、shift删除元素的第一个元素,shift完之后继续shift不会 报错,只会返回undefined
1、splice有三个参数,第一个是开始下标,
第二个参数是总共删除几个,第三个参数之后的参数是添加到缺的那个口上的
2、splice既可以删除又可以添加,只需第二个参数是0就是删除0个。
3、总结:它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素
4.console.log(arr.操作之后的数组都是打印被操作的东西的,若要打印arr,则直接打console.log(arr));
第二个参数是总共删除几个,第三个参数之后的参数是添加到缺的那个口上的
2、splice既可以删除又可以添加,只需第二个参数是0就是删除0个。
3、总结:它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素
4.console.log(arr.操作之后的数组都是打印被操作的东西的,若要打印arr,则直接打console.log(arr));
1、concat()方法并没有修改当前Array,而是返回了一个新的Array
2、concat()方法可以接收任意个元素和Array,并且自动把Array拆开,
然后全部添加到新的Array里
2、concat()方法可以接收任意个元素和Array,并且自动把Array拆开,
然后全部添加到新的Array里
1、将数组的每一项拆开,如果不是字符串会转为字符串,然后
用中间的字符串连接。
用中间的字符串连接。
对象
1、js的对象是动态的,可随意增加删除
2、删除对象属性,用delete 对象.属性名
3、还可以看属性是不是在对象里面
4、还可以看属性是不是自己的属性。
2、删除对象属性,用delete 对象.属性名
3、还可以看属性是不是在对象里面
4、还可以看属性是不是自己的属性。
1.javascript的map对象可以用二维数组来初始化,也可以用new Map对象来初始化
2.map对象的查询速度更快,如果用array对象来的话,需要两个array才能达到效果
3.map对象是一种键值对来的,要使用其中的一个键就用get,要设置一个键就用set
4。map对象要删除一个键的话,用map.delete;删完之后再来get的话就会undefined,
指的是未定义的空间被非法使用,删除是把管辖的区域减少了
2.map对象的查询速度更快,如果用array对象来的话,需要两个array才能达到效果
3.map对象是一种键值对来的,要使用其中的一个键就用get,要设置一个键就用set
4。map对象要删除一个键的话,用map.delete;删完之后再来get的话就会undefined,
指的是未定义的空间被非法使用,删除是把管辖的区域减少了
子主题
子主题
函数
1.
作用域和作用链
function setName(person){
person.name = "Jesse";
person = new Object();
person.name = "Another Jesse";
}
var person = new Object();
setName(person);
console.log(person.name);//Jesse
VM1205:8 Jesse
/*************************************************/
var color = "blue";
function changeColor(){
var anotherColor = "red";
function swapColors(){
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
console.log("color="+color);
console.log("anothercolor="+anotherColor);
console.log("tempColor="+tempColor);
}
swapColors();
}
changeColor();
VM1659:8 color=red
VM1659:9 anothercolor=blue
VM1659:10 tempColor=red
undefined
for(var i = 0;i<=10;i++){}
console.log(i);
VM1732:2 11
/*************************************************/
function buildUrl(){
var qs = "test";
with(location){
var url = href+qs;
}
return url;
}
buildUrl();
"http://www.108js.com/article/article1/10368.html?id=2605test"
function buildUrl(){
var qs = "test";
//with(location){
var url = location.href+qs;
//}
return url;
}
buildUrl();
"http://www.108js.com/article/article1/10368.html?id=2605test"
结论:1.值类型按值传递,引用类型按引用传递。传递的行为和用变量拷贝的行为是一样的
2.javascript中有两种执行环境(全局和局部)
3.执行环境内有一个变量对象定义了该执行环境下能访问的变量和函数
4.执行环境可以由内向外一直延伸到全局的执行环境
5.javascript没有块级作用域
2.javascript中有两种执行环境(全局和局部)
3.执行环境内有一个变量对象定义了该执行环境下能访问的变量和函数
4.执行环境可以由内向外一直延伸到全局的执行环境
5.javascript没有块级作用域
附上学习网址:http://www.108js.com/article/article1/10368.html?id=2605
var a = 100;
function fn(){
console.log(a);
var a = 200;
console.log(a);
}
fn();
console.log(a);
var a;
console.log(a);
var a = 300;
console.log(a);
VM909:3 undefined
VM909:5 200
VM909:8 100
VM909:10 100
VM909:12 300
/**************************/
/**************************/
var a = 100;
function fn(){
console.log(a);
a = 200;
console.log(a);
}
fn();
console.log(a);
var a;
console.log(a);
var a = 300;
console.log(a);
VM925:3 100
VM925:5 200
VM925:8 200
VM925:10 200
VM925:12 300
注意有一处不同,由此处不同可以看出每个执行环境都先找出该环境下的变量,
然后再去顺序执行语句,所以才会一开始打出undefined
然后再去顺序执行语句,所以才会一开始打出undefined
12.对象
子主题
0 条评论
下一页