第一章 值、类型和运算符
一、JavaScript 数据类型
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
(一)JavaScript 对象
在 JavaScript中,几乎所有的事物都是对象。
JavaScript 对象是变量的容器。
语法:
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
或者
var person = {
firstName:"John",
lastName:"Doe",
age:50,
eyeColor:"blue"
};
访问对象的属性
访问对象的方法
举例
函数属性作为一个方法访问 & 函数属性作为一个属性访问;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>创建和使用对象方法。</p>
<p>对象方法是一个函数定义,并作为一个属性值存储。</p>
<p id="demo1"></p>
<p id="demo2"></p>
<script>
var person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function()
{
return this.firstName + " " + this.lastName;
}
};
document.getElementById("demo1").innerHTML = "不加括号输出函数表达式:" + person.fullName;
document.getElementById("demo2").innerHTML = "加括号输出函数执行结果:" + person.fullName();
</script>
</body>
</html>
(二)数字
在JavaScript中有三个特殊的值:
Infinity:表示正无穷大。
-Infinity:表示负无穷大。
Infinity-1的结果仍然是Infinity,以此类推。不要过于依赖无穷运算的结果,因为这类运算并不真正属于数学运算,由此我们可以引出下一个特殊数字:NaN。
NaN:是数字类型的值,但我们用其表示“非数值”。举例来说,在计算0/0(0除以0)、Infinity-Infinity或当数值运算中产生不精确或毫无意义的结果时,就用NaN来表示。
(三)字符串
单双引号都可用来表示字符串。
如何把引号放入字符串?
1、使用单引号来包围其中带有一个或多个双引号的字符串。如'he said,"hello" '.
2、在引号前面使用反斜杠(\),引号就会当做字符串的一部分来处理。如“he said,"hello.\""()
(四)布尔值
1、比较
在JavaScript中,只有一个值不等于其自身,那就是NaN(Not a Number,非数值)。
NaN用于表示非法运算的结果,正因如此,不同的非法运算结果也不会相等。
2、逻辑运算符
&&运算符表示逻辑与,该运算符是二元运算符,只有当赋给它的两个值均为true时其结果才是真;
||运算符表示逻辑或。当两个值中任意一个为true时,结果就为真;
优先级:||优先级最低,其次是&&,接着是比较运算符(>,==等),最后是其他运算符。
(五)自动类型转换
1、JavaScript会将0、NaN和空字符串("")视为false,其他值视为true。因此,诸如0==false和""==false之类的表达式都是true。
如果我们不希望在比较的时候进行任何自动类型转换,可以使用另外两个运算符:===和!==
第一个运算符用于检测两个值是否严格相等,第二个运算符用于测试是否严格不等。
(六)逻辑运算符的短路特性
当左侧值可以被转换成true时,||运算符会直接返回左侧的值,否则会返回右侧的值。
||运算符的这种功能可用于返回默认值。如果左侧表达式可能产生空值,那么右侧的表达式可以在左侧表达式为空时作为替代。
&&运算符工作方式与其相似但不相同。当左侧的值可以被转换成false时,&&运算符会返回左侧值,否则返回右侧值。
这两种运算符的另一个重要特性是:只有必要时才会计算右侧的表达式。
(七)变量
1、创建变量
- 变量名必须以一个字母、$或者_开头
- 变量名只能包含字母、数字、$和_
- 变量名区分大小写
2、变量的使用
注意不能把变量和引号一起使用,引号只是和字符串一起使用
3、数值转换
var numOfShoes='2';
var numOfShoes=4;
var totalItems=numOfShoes+numOfSocks;
结果为 字符串'24'
若想将其等于6
方法一:在字符串前面加‘+’号(确保变量和+号之前没有空格),就可以把字符串转为数值。
var numOfShoes='2';
var numOfShoes=4;
var totalItems=+numOfShoes+numOfSocks;
方法二:使用Number()命令
var numOfShoes='2';
var numOfShoes=4;
var totalItems=Number(numOfShoes)+numOfSocks;
Number()在可能的情况下把一个字符串转换为数值(如果字符串只是字母而不是数值,我们会得到一个NaN值,表示不能把字母转换为一个数值)
在进行乘法运算时,解释器会把字符串转换为数值。
练习
请求信息
<script>
var name=prompt("what is your name?",' ');
document.write("<p>welcome"+name+"</p>");
</script>
(七)数组
1、创建数组
2、访问数组
days[6]='sunday'; 等价于 days[days.length-1]
3、向数组添加项目
举例:var properties=['red','14px','Arial'];
(1)在数组末尾添加
方法一:properties[3]='bold';
方法二:properties[properties.length]='bold';
方法三:properties.push('bold');
push()命令的优点是允许向数组中添加多个项目。
例如:properties.push('bold','italic','underlined');
(2)在数组开头添加
方法:使用unshift()命令
var properties=['red','14px','Arial'];
properties.unshift('bold');
unshift()允许向数组开头添加多个项目。
例如:properties.push('bold','italic','underlined');
4、从数组删除项目
二、函数
(一)函数基础
1、带有返回值的函数
2、局部变量和全局变量
(二)JS函数参数
1、ES6 函数可以自带参数
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>设置参数的默认值。</p>
<p id="demo1"></p>
<p id="demo2"></p>
<script>
function myFunction(x, y = 10) {
// 如果不传入参数 y ,则其默认值为 10
return x + y;
}
// 输出 2
document.getElementById("demo1").innerHTML = myFunction(0, 2) ;
// 输出 15, y 参数的默认值
document.getElementById("demo2").innerHTML = myFunction(5);
</script>
</body>
</html>
2、Arguments 对象
JavaScript 函数有个内置的对象 arguments 对象。
argument 对象包含了函数调用的参数数组。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p id="demo"></p>
<script>
x=myfunction(11,22,33,44,55);
function myfunction(){
var i,max=arguments[0];
if (arguments.length<2)return max;
for(i=0;i<arguments.length;i++){
if(arguments[i]>max)
max=arguments[i];
}
return max;
}
document.getElementById("demo").innerHTML=x;
</script>
<button onclick="myfunction('gabby','web开发')">点我</button>
</body>
</html>
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p id="demo"></p>
<script>
x=myfunction(11,22,33,44,55);
function myfunction() {
var i, sum=0;
for(i=0;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
document.getElementById("demo").innerHTML=x;
</script>
<button onclick="myfunction('gabby','web开发')">点我</button>
</body>
</html>
(三)函数调用
1、this 关键字
(1)一般而言,在Javascript中,this指向函数执行时的当前对象。注意 this 是保留关键字,你不能修改 this 的值。
(2)当函数没有被自身的对象调用时 this 的值就会变成全局对象。在 web 浏览器中全局对象是浏览器窗口(window 对象)。
2、函数作为调用方法
在 JavaScript 中你可以将函数定义为对象的方法。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>myObject.fullName() 返回 John Doe:</p>
<p id="demo"></p>
<script>
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
document.getElementById("demo").innerHTML = myObject.fullName();
</script>
</body>
</html>
3、使用构造函数调用函数
如果函数调用前使用了 new 关键字, 则是调用了构造函数。
这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>该实例中, myFunction 是函数构造函数:</p>
<p id="demo"></p>
<script>
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
var x = new myFunction("John","Doe")
document.getElementById("demo").innerHTML = x.firstName;
</script>
</body>
</html>
构造函数的调用会创建一个新的对象。新对象会继承构造函数的属性和方法。
构造函数中 this 关键字没有任何的值。
this 的值在函数调用实例化对象(new object)时创建。
三、逻辑和控制