day 51 html 学习 js 学习

函数

函数定义

JavaScript中的函数和Python中的非常类似,只是定义方式有点区别

// 普通函数定义
function f1() {
  console.log("Hello world!");
}

// 带参数的函数
function f2(a, b) {
  console.log(arguments);  // 内置的arguments对象
  console.log(arguments.length);
  console.log(a, b);
}

// 带返回值的函数
function sum(a, b){
  return a + b;
}
ret=sum(1, 2);  // 调用函数 并用ret接受返回值

console.log(ret) //将返回值打印到控制台上去
// 匿名函数方式 var sum = function(a, b){ return a + b; };
sum(
1, 2); //调用它 // 立即执行函数 (function(a, b){ return a + b; })(1, 2);

函数的全局变量和局部变量

局部变量

在JavaScript函数内部声明的变量使用 var是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

全局变量:

函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

变量生存周期:

JavaScript变量的生命期从它们被声明的时间开始。

局部变量会在函数运行以后被删除

全局变量会在页面关闭后被删除

作用域

首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。

几个例子:

var city="Beijing";
function f(){
    var city="shanghai";
    function inner(){

        // var city="nanjing";
        console.log(city);
    }
    inner();
}
f();
//最终打印的结果是nanjing 当将var city='nanjing' 注释掉之后打印的是 shanghai
// 证明他的作用域是 从里往外找
var city='beijing';
function f(){
var city='shenzhen';
console.log(city);
}
function bar(){
var city='nanjing';
return f;
}
ret=bar(); //调用bar 函数并用ret 接收返回值
ret(); //执行返回值 得到函数中的值

//打印结果是shenzhen 则也证明了局部作用域的起效
var city='beijing';
function f() {
    var city='nanjing';
    function inner(){
        console.log(city);
    }
    inner();

}
f();
//打印的结果是'najing '与Python中的闭包效果是一样的,

 

//闭包
var city='beijing';
function f() {
    var city='nanjing';
    function inner(){
        console.log(city);
    }
    inner();

}
f();
//打印的结果是'najing '与Python中的闭包效果是一样的,调用它的上层而非全局变量中的值

内置对象和方法

JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。在JavaScript中,对象是拥有属性和方法的数据。

我们在学习基本数据类型的时候已经带大家了解了,JavaScript中的Number对象、String对象、Array对象等。

自定义对象

类似于(某方面类似)Python中的字典数据类型

 

自定义对象

类似于(某方面类似)Python中的字典数据类型

var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]);

遍历对象中的内容:

var a={'name':'alex','age':18};

for (var i in a){
    console.log(i,a[i])
}
//打印中的内容,i 代表的是对象a中的键,可以用for循环打印出他的键,值

创建对象:

var person=new Object();  // 创建一个person对象
person.name="Alex";  // person对象的name属性
person.age=18;  // person对象的age属性

扩展:

// 父类构造函数
var Car = function (loc) {
  this.loc = loc;
};

// 父类方法
Car.prototype.move = function () {
  this.loc ++;
};

// 子类构造函数
var Van = function (loc) {
  Car.call(this, loc);
};

// 继承父类的方法
Van.prototype = Object.create(Car.prototype);
// 修复 constructor
Van.prototype.constructor = Van;
// 扩展方法
Van.prototype.grab = function () {
  /* ... */
};
复制代码

Date对象

创建Date对象

//方法1:不指定参数
var d1 = new Date();
console.log(d1.toLocaleString());
//方法2:参数为日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());
//方法3:参数为毫秒数
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());

//方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString());  //毫秒并不直接显示

Date对象的方法:

var d = new Date();        d 中的日期时间是当前的时间日期
//getDate()                 获取日
//getDay ()                 获取星期   ()
//getMonth ()               获取月(0-11)  这里要注意
//getFullYear ()            获取完整年份
//getYear ()                获取年
//getHours ()               获取小时
//getMinutes ()             获取分钟
//getSeconds ()             获取秒
//getMilliseconds ()        获取毫秒
//getTime ()                返回累计毫秒数(从1970/1/1午夜)

练习:

编写代码,将当前日期按“2017-12-27 11:11 星期三”格式输出

//date对象
var d=new Date();
//d,getDay()是获得星期的(从0-6)所以弄一个列表,用获取的数字值和 li 中的星期
var li=['日','一','二','三','四','五','六'];
//因为时间的分钟当小于10分钟的时候返回的是一个个位数,需要手动给它前边加一个0, 做如下if
//判断语句
var x=0;
if (d.getMinutes()>10){x=d.getMinutes()}else{x='0'+d.getMinutes();}
console.log(d.getDay());
console.log(d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate()+' '
+d.getHours()+':'+x+li[d.getDay()]);

JSON对象

注意这里与Python 不同的是 调用的时候是 需要 大写JSON

序列化

var
a={'name':'alex','age':15}; //序列化的过程 ret=JSON.stringify(a); console.log(ret,typeof(ret)); //这个打印出来的是字符串格式的 a 和 格式 显示是string console.log(a,typeof(a)); //这个打印的是对象形式的a 显示格式是 object //反序列化的过程 x=JSON.parse(ret); console.log(x,typeof(x)); //这个打印的是对象形式的a 显示格式是 object

RegExp对象

//RegExp对象

//创建正则对象方式1
// 参数1 正则表达式
// 参数2 验证模式:g(global)和i(忽略大小写)

// 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。

// 创建RegExp对象方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g");

// 匹配响应的字符串
var s1 = "bc123";

//RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
reg1.test(s1);  // true

// 创建方式2
// /填写正则表达式/匹配模式
var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;

reg2.test(s1);  // true



// String对象与正则结合的4个方法
var s2 = "hello world";

s2.match(/o/g);         // ["o", "o"]             查找字符串中 符合正则 的内容
//会打印出 (3) ["o", "o", "o"]
// 前边是数量后边是匹配出来的内容当数量大于二时才会有反应
s2.search(/h/g);        // 0                      查找字符串中符合正则表达式的内容位置

s2.split(/o/g); // ["hell", " w", "rld"] 按照正则表达式对字符串进行切割 s2.replace(/o/g, "s"); // "hells wsrld" 对字符串按照正则进行替换 // 关于模式:g和i的简单示例 var s1 = "name:Alex age:18"; s1.replace(/a/, "哈哈哈"); // "n哈哈哈me:Alex age:18" s1.replace(/a/g, "哈哈哈"); // "n哈哈哈me:Alex 哈哈哈ge:18" 全局匹配 s1.replace(/a/gi, "哈哈哈"); // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18" 不区分大小写

 

 

 

Math对象   (调用的时候一定要注意Math.方法() M一定要大写

abs(x)      返回数的绝对值。
exp(x)      返回 e 的指数。
floor(x)    对数进行下舍入。
log(x)      返回数的自然对数(底为e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次幂。
random()    返回 0 ~ 1 之间的随机数。
round(x)    把数四舍五入为最接近的整数。
sin(x)      返回数的正弦。
sqrt(x)     返回数的平方根。
tan(x)      返回角的正切。

 

//调用的时候要一定要大写 Math 
console.log(Math.abs(-1));
//max 中的数字直接以逗号分隔开找其中的小的值
console.log(Math.max(1,2,3,4));
console.log(Math.min(-1,0,1,2,3));

 

posted on 2017-12-27 17:12  王大拿  阅读(178)  评论(0编辑  收藏  举报

导航