@caelumtian
2017-08-30T19:30:34.000000Z
字数 3791
阅读 1030
Web程序设计(考研)
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
<script>console.log(1)</script>
<script src="./jquery-2.1.0.min.js"></script>
javascript是一种弱类型语言,并不对数据由很严格的区分。统一用var
声明变量
声明一个变量:var a = 1; var b = 1.0
。相关的函数如下:
parseInt
:强制转换成整数 parseFloat
:强制转换成浮点型 浮点计算问题:1.79+0.12 NaN
:表示想表示成数字但是没有成功的数Number
:Number类型的构造函数,注意parseInt和Number转换的区别 Math大部分为静态方法,提供了一些与数学操作有关的函数:
Math.floot
:地板除Math.sqrt
:数学开方运算Math.pow
:数学幂运算 声明一个字符串类型:var a = "hyang";
常见的字符串属性和方法如下,注意:字符串是可变类型,只能重新赋值
str.length
:字符串的长度str.toLowerCase
:字符串变小写str.toUpperCase
:字符串变大写str.indexOf
:是否包含某个字符,返回位置,或者-1str.split
:分割字符串 str.charAt
:返回指定位置上的字符,可以跟数组一个用法。str.slice
:分割字符串 声明一个数组类型:var arr = [1, 2, 3];
请使用字面量声明方式,常见方法如下:
arr.length
:返回数组长度 arr.sort
:数组排序,根据return值排序 arr.slice
:数组分割 arr.join
:数组转换成字符串 arr.indexOf
:返回数组指定的内容的索引 arr.push arr.pop,arr.shift, arr.unshift
:数组的队列操作 声明一个对象类型:var obj = {"name": "tgy"};
建立一个对象/hash,访问方法 obj["name"];obj.name;
循环的遍历for in
;删除对象属性delete
声明一个boolen类型 true
, false
;空值,0,NaN,undefined,null都是false类型;
声明一个日期类型var date = new Date()
;主要的属性有:
date.getFullYear
:获得日期的年份date.getMonth
:获得日期的月份(+1)date.getDate
:获得日期的天数 date.getDay
:获得日期的星期 设计一个倒计时程序,见附录
声明一个正则表达式类型,主要函数由test
, match
, replace
等
定义一个函数类型:
function main() {
console.log("hello world");
}
main();
var main = function() {}
(function() {
console.log("IIFE");
})()
设置参数,访问参数arguments(类数组)。
变量的作用域:向上查找,没有块级作用域。变量的提升,函数的提升问题。this
的指向问题
function Person(name, age) {
this.name = name;
this.age = age;
}
var per = new Person("tgy", 22);
console.log(per.name + per.age);
在JS中,就是把定义在后面的东东(变量或函数)提升到前面中定义。
在javascript,变量有4种基本方式进入作用域:
函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部。这个意思是,像下面的代码:
function foo() {
bar();
var x = 1;
}
实际上会被解释成:
function foo() {
var x;
bar();
x = 1;
}
任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。
在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:
(1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如:
var name = "tgy";
function doSomthing() {
var name = "lwq";
function innerFunc() {
console.log(name);
}
innerFunc();
}
console.log(name);
(2)所有末定义直接赋值的变量自动声明为拥有全局作用域(即没有使用var声明的变量),例如:
function doSomething(){
var name = "tgy";
globalName = "hyy";
console.log(name);
}
console.log(globalName);
变量globalName拥有全局作用域,而name在函数外部无法访问到。
(3)所有window对象的属性拥有全局作用域
一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location、window.top等等
在javascript中是没有块级作用域这个概念的。例如下面:
for(var i = 0; i < 5; i++) {}
console.log(i); //输出5
+
有着特殊的含义,不仅可以用于数字的相加,还可以用于字符串的连接。
var arr = ["a", "b", "c"];
for(var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
var obj = {
"name": "tgy",
age: "12"
}
for(var prop in obj) {
console.log(obj[prop]);
}
if(true) {
//...
}else {
//...
}
switch(a) {
case "A":
//...
break;
default:
//...
}
答案见:编程练习程序代码答案
function countDown(endTime) {
var interval;
var hEle = document.getElementById("h");
var mEle = document.getElementById("m");
var sEle = document.getElementById("s");
function getRTime() {
var nowTime = new Date();
var t = endTime.getTime() - nowTime.getTime();
if (t <= 0) {
clearInterval(interval);
return;
}
var h = String(Math.floor(t / 1000 / 60 / 60 % 24));
var m = String(Math.floor(t / 1000 / 60 % 60));
var s = String(Math.floor(t / 1000 % 60));
h = h.length === 1 ? "0" + h : h;
m = m.length === 1 ? "0" + m : m;
s = s.length === 1 ? "0" + s : s;
hEle.textContent = h;
mEle.textContent = m;
sEle.textContent = s;
}
interval = setInterval(getRTime, 1000);
}