例子1:冒泡排序
冒泡排序思想:(1)依次比较两个相邻的数字,小的放前面,大的放后面
//冒泡排序
function bubbleSort(tmpArr) {
for(var i = tmpArr.length-1; i > 0; i--) {
for(var j=0; j<i; j++) {
if(tmpArr[j] > tmpArr[j+1]) {
swap(j,j+1);
}
}
}
}
function swap(a,b) {
var tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
bubbleSort(arr);
console.log(arr);
例子2:快速排序(1)选择一个元素作为基准(2)比该元素小的放在左边,比该元素大的放在右边(3)重复以上步骤
//数组去重快速排序
var arr = [8,10,4,2,5,7,3,5,6,8];
function quickSort(tmpArr) {
if(tmpArr.length <= 1) {
return tmpArr;
}
var left = [];
var right =[];
var index = Math.floor(tmpArr.length / 2);
var middleVal = tmpArr.splice(index,1)[0];
// document.write(middleVal);
for(var i=0; i<tmpArr.length; i++) {
if(tmpArr[i] > middleVal) {
right.push(tmpArr[i]);
}else {
left.push(tmpArr[i]);
}
}
return quickSort(left).concat(middleVal,quickSort(right));
}
var newArr = quickSort(arr);
console.log(newArr);
3.this关键字
(1)它是个关键字,不能当成变量使用。
(2)代表函数运行时产生的一个对象,只能在函数内部使用。
(3)随着函数的使用场合不同,this会发生改变。
(4)指向调用函数的对象。
例子(1)
function fn() {
this.x = 'hello';
console.log(this.x);
}
fn();//hello
例子(2)
function fn() {
this.x = 'hello';
console.log(this.x);
console.log(this.b);
}
var obj = {
a:fn,
b:"Object"
}
obj.a();//hello,Object
4.例子(1)
// 打印输出结果
console.log(1 + "2"+"2"); //数字与字符串进行连接,合成一个新的字符串 //122;
console.log(1+ +"2"+"2"); // 一元+操作符可将字符串转换为数字 //‘32’
console.log("A" - "B"+"2"); // NaN(无法转换数字的情况下产生的值) 'NaN2';
console.log("A"- "B"+2); // NaN + 2 = NaN
例子(2)
function test() {
var n = 4399;
function add() {
n++; // 4401
console.log(n);
}
return {
n: n,
add: add
}
}
var result = test();
var result2 = test();
result.add(); // 4400
result.add(); //4401
console.log(result.n); // 4399
result2.add(); // 4400
例子(3)
var arr = [];
arr[0] = 0;
arr[1] = 1;
arr.foo = 'c'; // 作为数组的自定义属性添加,首先可以正常使用,但是不会添加到数组的长度内;
console.log(arr.length);//2
例子(4)
var a = undefined;
var b = 'false';
var c = '';
function print(val) {
// val === 'undefined'; 非空的字符串 string true 空字符串转换为布尔值 false; undefined == false;
if (val) {
alert(true);
} else {
alert(false);
}
}
print(a); //true
print(b); // true
print(c); //false
例子(5)
var person = {
fname: 'john',
lname: 'Doe',
age: 25
};
var txt = "";
for (var o in person) {
txt += person[o]; //'john'; 'Doe'; 25; txt = 'johnDoe25';
}
console.log(txt); //johnDoe25
例子(6)
//考察数组的掌握程度 自身改变操作以及生成新的数组的操作
var arr = [1, 2, 3];
arr.shift(); // arr = [2,3]; arr.shift = [1];
arr.push(1); //arr = [2,3,1];
arr.unshift(2); // arr = [2,2,3,1];
var newArr = arr.concat([1, 2]); //newArr = [2,2,3,1,1,2];
console.log(newArr);
例子(7)
// JS没有块级作用域
var msg = 'hello'; //几乎没用 障眼法
for (var i = 0; i < 10; i++) {
var msg = 'hello' + i * 2 + i; //'hello' + 9*2 + 9; 'hello' + 18 + 9; 'hello189';
}
console.log(msg);