HTML 学习笔记 May 10,2017 js函数调用过程内存分析、js函数细节、js一维数组细节、二维数组转置、js面向对象编程介绍、类(原型对象)和对象、类和对象细节、创建对象的几种方式、this关键字详解

HTML 学习笔记 May 10,2017 js函数调用过程内存分析、js函数细节、js一维数组细节、二维数组转置、js面向对象编程介绍、类(原型对象)和对象、类和对象细节、创建对象的几种方式、this关键字详解

var myvar = jiSuan('abc');

js 函数

var num1 = window.prompt('请输入第一个 num');
var num2 = window.prompt('请输入第二个 num');
var operator = window.prompt('请输入运算符');
num1 = parseFloat(num1);
num2 = parseFloat(num2);

// 如何调用函数
document.write("res = " + jiSuan(num1,num2,operator));

//自定义函数
// 输入两个数,再输入一个运算符
function jiSuan(num1,num2,operator) {
var res = 0;
if (operator == '+') {
res = num1 + num2;
} else if (operator == '-') {
res = num1 - num2;
} else if (operator == '*') {
res = num1 * num2;
} else {
res = num1 / num2;
}
return res; // 返回
}

var myvar = text('abc');
// 如果 text 函数没有返回值,但是你又接收了,则返回 undifined ,如果有返回值,则是什么就返回什么.

function abc2 () {

// 在 js 中有一个 arguments ,可以访问所有传入值
// window.alert(arguments.length);
// 遍历所有的参数
for (var i = 0;i<arguments.length;i++) {
window.alert(arguments[i]);
}
}

JS 中的数组,可以存放更种数值,不区分类型

// 老王的王八体重
var weights = [3,5,1,3.4,2,50];
var all_weight = 0;
var avg_weight = 0;
// 数组的遍历
for (var i = 0;i<weights.length;i++) {
all_weight += weights[i];
}
avg_weight = all_weight/weights.length;
// 如果你想知道它的数据类型是什么
window.alert(avg_weight.constructor); // 可以打印出来它是什么数据类型 function Number() {[native code]}
document.writeln("总体重是" + all_weight + "平均体重是" + avg_weight.toFixed(2)); // toFixed(2) 就是保留两位小数.

js 中的数组是引用传值
数值传值原理图:

屏幕快照 2017-05-20 11.19.34.png

数组传值原理图:

屏幕快照 2017-05-20 11.19.39.png

var str = "hello world abc";
var arr = str.split(" "); // 用空格来分隔字符串成数组
window.alert(arr);

// 还可以使用 for in 进行循环
for (var key in arr) {
window.alert(key + "= " arr[key]);
}

// 二分查找
二分查找有个前提,该数组是有序的.如果不是有序的,就不能用二分查找

Math.floor((1+2)/2); // 这样就是 1

// 二分排序
var arr = [1,4,6,8,90,800];
// 思路:找到数组的中间数(midVal),和你要查找的数(findVal) 进行比较,如果 midVal > findVal 则说明 findVal 在数组的左边,就把该数组二分(就只在左边查找)
function binarySearch(arr,findVal,leftIndex,rightIndex) {

// 防止无穷递归
if (leftIndex>rightIndex) {
// 提示找不到
document.writeln("找不到");
return;
}
// 找到中间这个值
var midIndex = Math.floor((leftIndex+rightIndex)/2);
var midVal = arr[midIndex];

// 比较
if (midVal>findVal) {
// 在左边找
binarySearch(arr,findVal,leftIndex,midIndex-1);
} else if (midVal<findVal) {
// 在右面找
binarySearch(arr,findVal,midIndex+1,rightIndex);
} else {
document.writeln("找到 下标为"+midIndex);
return;
}
}

对二维数组进行转置
var arr = [[2,4,6,8],[8,9,0,-1],[9,6,2,1]];

// 定义一个新的数组
var arr2 = [];
// 初始化,定下有多行
for (var i = 0;i<arr[0].length;i++) {
arr2[i] = [];
}

// 可以动态的添加数据
// 遍历旧数组
for (var i = 0; i<arr.length;i++) {
for (var j = 0; j<arr[i].length;j++) {
arr2[j][i] = arr[i][j];
}
}

// 成功!遍历 arr2 数组就是一个转置数组
for (var i = 0; i<arr2.length;i++) {
for (var j = 0; j<arr2[i].length;j++) {
document.writeln(arr2[i][j] + " ");
}
document.write("
");
}

js 面向(基于)对象编程

js 中基于对象 == js 面向对象

js 中没有类 class ,但是它取了一个新名字叫原型对象。因此,类等同于 原型对象。

// 这里就是一个 Cat 类
function Cat() {

}
//
Cat();// 如果这样用,Cat()就是函数
var cat1 = new Cat();// 如果这样用,就是 类
// 这时 cat1 就是一个对象(实例)
cat1.name = "小白";
cat1.age = 3;
cat1.color = "白色";
// js 中对象的属性可以动态的添加
// 属性没有限制.
window.alert(cat1.name);
window.alert(cat1.age);
window.alert(cat1.color);

创建对象:
var 对象名=new 类名();

function Person(){}
var a = new Person();
window.alert(a.constructor); // a 对象实例的构造函数
window.alert(typeof a); // a 的类型是 object

var b = 123;
window.alert(b.constructor);
window.alert(typeof b); // b 的类型是 number
var c = "123";
window.alert(c.constructor);
window.alert(typeof c); // b 的类型是 string

// 如何判断一个对象实例是不是 Person 类型
if (a instanceof Person) {
window.alert("a 是 Person");
}
// 也可以用这种方法 来判断 a 是不是 Person 类型
if (a.constructor==Person) {
window.alert("a 是 Person");
}

var b = cat1;
b.name = "逗逗";
window.alert(b.age + "名字" + b.name + cat1.name); // 这里 a 和 b 的名字都变成了"逗逗"

调用私有属性
function Person() {
var name="abc"; // 如果这样去使用 name 这个属性是私有的
var age=900;
this.name2 = "abc2"; // this.name2 表示 name2 这个属性是公开的
this.show=function() { // 如果你一定要访问私有属性,则需要定义一个公开方法
window.alert(name + " " + age);
}
}
var p1 = new Person();
p1.show();


这个打印出来是 90

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容