JavaScript笔记01_基本操作
1. JS代码编写的位置
- 标签的onclick属性中
- 超链接的href属性中
- script标签中
- JS外部文件中
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>JS代码编写的位置</title>
<script type="text/javascript">
<!-- 3. 可以将JS代码写在script标签中 , 加载页面立即执行-->
alert('我是script标签中的代码!!!');
</script>
<!-- 4. 可以将JS代码写在JS外部文件中,需要使用script标签的src属性引用
注意:script标签一旦用于引入外部文件了,就不能在编写代码了。即使编写了浏览器也会忽略
如果需要则可以在创建一个新的script标签用于编写内部代码
-->
<script type="text/javascript" src="js/scipt.js" ></script>
</head>
<body>
<!-- 1. 可以将JS代码编写到标签的onclick属性中, 点击按钮执行代码 -->
<button onclick="alert('弹窗');"></button>
<!-- 2. 可以将JS代码写在超链接的href属性中, 点击超链接时执行代码 -->
<a href="javascript:alert('弹窗2');">这是一个超链接</a>
<!-- 下面的代码常用来控制一个链接点击之后没有反应的情况-->
<a href="javascript:;">这是一个超链接</a>
<!-- 虽然可以卸载标签的属性中, 但是他们属于结构和行为耦合, 不方便维护, 不推荐使用 -->
</body>
</html>
scipt.js
alert("我是JS外部文件中的代码!!!");
2. 为什么JavaScript中代码要以分号结束
如果不加分号,浏览器会自动添加,但是会消耗一些系统资源,有的时候,浏览器会加错分号,导致运行出错。
3. 字面量和变量
字面量:都是一些不可以改变的值,如1, 2, 4, 5;字面量可以直接使用,但是我们一般不会直接使用字面量。
变量: 变量是用来保存字面量的,而且变量的值是可以任意改变的。变量更加方便我们使用,所以开发中都是通过变量去保存一个字面量,而很少直接使用字面量。
4. 数据类型
- 基本数据类型:String、 Number、 Boolean、 Null、Undefined
- 引用数据类型:Object
- 使用
typeof 变量可以检验一个变量的类型 NaN是一个特殊的数字,表示Not A Number ,使用typeof检验一个NaN也会返回number- 如果使用JavaScript进行浮点数运算,可能得到一个不精确的结果。
- Null类型的值只有一个,就是null, null这个值专门用来表示一个为空的对象,使用typeof检查null值时,返回Object。
- Undefined类型的值只有一个,就是undefined,当声明一个变量,但是并不给变量赋值时,他的值就是undefined,使用typeof检查一个undefined时会返回undefined。
5. 类型装换
其他类型转为String类型
- 方式一:调用被转换数据类型的toString()方法。该方法不会影响到原变量,null和undefined没有该方法。
- 方式二:使用String()函数,并将被转换的数据作为参数传递给函数。
其他类型转换位Number类型
方式一:使用Number()函数
如果是纯数字的字符串吗,则直接转换位数字;如果字符串中有非数字的内容,则转换位NaN;如果字符串是一个空串或者是一个全是空格的字符串,则转换为0;true转为1,false转为0;null转为0;undefined转为数字NaN;
方式二:parseInt()和parseFloat()函数,专门用来转换字符串的,如果是非String类型的变量会先转换为String再操作;
6. ++a和a++
a++的值等于原变量的值(自增前的值)
++a的值等于原变量的新值(自增后的值)
var d = 20;
// 20 + 22 + 22
var result = d++ + ++d + d;
console.log("result = " + result);
var e = 20
e = e++;
console.log("e = " + e);//20
a--的值等于原变量的值(自减前的值)
--a的值等于原变量的新值(自减后的值)
var n1 = 10, n2 = 20;
var n = n1++; //n1 = 11 n1++ = 10
console.log('n=' + n); //10
console.log('n1=' + n1);//11
n = ++n1; //n1 = 12; ++n1 = 12
console.log('n=' + n); //12
console.log('n1=' + n1); //12
n = n2--; //n2 = 19 n2-- = 20
console.log('n=' + n); //20
console.log('n1=' + n2); //19
n = --n2; //n2 = 18 --n2 = 18
console.log('n=' + n); //18
console.log('n2=' + n2); //18
7. 逻辑运算符
JS中为我们提供了三种逻辑运算符
! 非
!可以用来对一个值进行非运算。所谓非运算就是值对一个布尔值进行取反操作,true变false,false变true。如果对一个值进行两次取反,它不会变化。如果对非布尔值进行元素,则会将其转换为布尔值,然后再取反。所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值。可以为一个任意数据类型取两次反,来将其转换为布尔值,原理和Boolean()函数一样。&& 与
&&可以对符号两侧的值进行与运算并返回结果,运算规则:
两个值中只要有一个值为false就返回false,只有两个值都为true时,才会返回true。JS中的“与”属于短路的与,如果第一个值为false,则不会看第二个值。|| 或
||可以对符号两侧的值进行或运算并返回结果,运算规则:
两个值中只要有一个true,就返回true。如果两个值都为false,才返回false。JS中的“或”属于短路的或。如果第一个值为true,则不会检查第二个值。&& || 非布尔值的情况
对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回原值
- 与运算:
如果第一个值为true,则必然返回第二个值
如果第一个值为false,则直接返回第一个值 - 或运算:
如果第一个值为true,则直接返回第一个值
如果第一个值为false,则返回第二个值
//与运算:如果两个值都为true,则返回后边的;如果两个值中有false,则返回靠前的false
var result = 5 && 6;
//如果第一个值为true,则直接返回第一个值
result = 2 || 1;
result = 2 || NaN;
result = 2 || 0;
//如果第一个值为false,则直接返回第二个值
result = NaN || 1;
result = NaN || 0;
8. 相等运算符
/*
* 相等运算符用来比较两个值是否相等,
* 如果相等会返回true,否则返回false
*
* 使用 == 来做相等运算
* - 当使用==来比较两个值时,如果值的类型不同,
* 则会自动进行类型转换,将其转换为相同的类型
* 然后在比较
* 不相等
* 不相等用来判断两个值是否不相等,如果不相等返回true,否则返回false
* - 使用 != 来做不相等运算
* - 不相等也会对变量进行自动的类型转换,如果转换后相等它也会返回false
*
*
* ===
* 全等
* - 用来判断两个值是否全等,它和相等类似,不同的是它不会做自动的类型转换
* 如果两个值的类型不同,直接返回false
* !==
* 不全等
* - 用来判断两个值是否不全等,和不等类似,不同的是它不会做自动的类型转换
* 如果两个值的类型不同,直接返回true
9. 特殊值undefined、null和NaN的比较和判断
undefined衍生自null,所以两个值做相等判断时,会返回true;
console.log(undefined == null); //true
NaN不和任何值相等,包括他本身。因此,判断一个值是否是NaN时候,需要借助函数isNaN();
var a = NaN;
console.log(a == NaN);//false
console.log(isNaN(a));//true;
10. 对象
1. 基本概念:
JavaScript中的数据类型有String、Number、Boolean、Null、Undefined五种基本数据类型。只要不是上面的五种类型,都是Object对象类型。
基本数据类型都是单一值,值和值之间没有任何联系。对象属于一种复合的数据类型,在对象中可以保存多个不同类型的属性。
2.对象的分类:
①内建对象:由ES标准中定义的对象,在任何的ES的实现中都可以使用;比如Math、String、Number、Boolean、Function、Object。
②宿主对象:由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象比如BOM、DOM。
③自定义对象:由开发人员自己创建的对象。
3. 对象的基本操作
使用new关键词调用的函数,是构造函数constructor。构造函数是专门用来创建对象的函数。使用typeof检查一个对象时,会返回object。
var obj = new Object();
/*
* 在对象中保存的值称为属性
* 向对象添加属性
* 语法:对象.属性名 = 属性值;
*/
//向obj中添加一个name属性
obj.name = "孙悟空";
//向obj中添加一个gender属性
obj.gender = "男";
//向obj中添加一个age属性
obj.age = 18;
/*
* 读取对象中的属性
* 语法:对象.属性名
*
* 如果读取对象中没有的属性,不会报错而是会返回undefined
*/
console.log(obj.gender);
console.log(obj.hello);
/*
* 修改对象的属性值
* 语法:对象.属性名 = 新值
*/
obj.name = "tom";
/*
* 删除对象的属性
* 语法:delete 对象.属性名
*/
delete obj.name;
4. 属性名和属性值
向对象中添加属性时,对象的属性名不强制要求遵循标识符的规范,什么乱七八糟的名字都可以使用,但是我们还是尽量按照标识符的规范去做。
var obj = new Object();
obj.name = "孙悟空";
如果要使用特殊的属性名,不能采用.的方式操作,需要使用另一种方式:
语法:对象["属性名"] = 属性值
读取时也需要采用这种方式。使用[]这样的形式去操作属性,更加的灵活,在[]中可以之际金额传递一个变量,这样变量值是多少就会读取那个属性。
obj["123"] = 789;
obj["nihao"] = "你好";
var n = "nihao";
//console.log(obj["123"]);
JavaScript对象的属性值,可以是任何类型的数据类型,甚至也可以是一个对象。
obj.test = true;
obj.test = null;
obj.test = undefined;
//创建一个对象
var obj2 = new Object();
obj2.name = "猪八戒";
//将obj2设置为obj的属性
obj.test = obj2;
in运算符:通过该运算符可以检查一个对象中是否含有指定的属性,如果有则返回true,没有则返回false。
语法:"属性值" in 对象
//检查obj中是否含有test2属性
//console.log("test2" in obj);
//console.log("test" in obj);
console.log("name" in obj);
11. 基本数据类型和引用数据类型
基本数据类型:String、Number、Boolean、Null、Undefined
引用数据类型:Object
JavaScript中的变量都保存到栈内存中。基本数据类型的值直接在栈内存中存储,值和值之间是相互独立的,修改一个变量不会影响其他变量的值。
引用类型的对象是保存在堆内存中,每创建一个新的对象,就会在堆内存中开辟一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象的引用,当一个通过变量修改属性时,另一个也会受到影响。
当比价两个基本数据类型的值时,就是比较的值。而比较两个引用数据类型时,他比较的时内存地址,如果两个对象一模一样,但是地址不一样,使用==比较时也会返回false。
12. 对象的字面量
创建一个对象可以使用关键词new
var obj = new Object();
也可以使用对象字面量来创建一个对象
var obj = {}
使用对象字面量,可以在创建对象时,直接指定对象中的属性,语法:
{属性值:属性名, 属性名:属性值}
对象字面量的属性名可以加引号也可以不加,建议不加,如果要使用一些特殊的名字,则必须加引号。
JavaScript笔记01_基本操作的更多相关文章
- [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象
js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...
- [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符
“1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
- [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...
- [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法
js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...
- 从头开始学JavaScript 笔记(一)——基础中的基础
原文:从头开始学JavaScript 笔记(一)--基础中的基础 概要:javascript的组成. 各个组成部分的作用 . 一.javascript的组成 javascript ECMASc ...
- 【原】javascript笔记之Array方法forEach&map&filter&some&every&reduce&reduceRight
做前端有多年了,看过不少技术文章,学了新的技术,但更新迭代快的大前端,庞大的知识库,很多学过就忘记了,特别在项目紧急的条件下,哪怕心中隐隐约约有学过一个方法,但会下意识的使用旧的方法去解决,多年前ES ...
- JavaScript笔记目录
JavaScript笔记目录 一.JavaScript简介 二.在HTML中使用JavaScript ...持续更新中,敬请期待
- 蛋糕仙人的javascript笔记
蛋糕仙人的javascript笔记:https://www.w3cschool.cn/kesyi/kesyi-nqej24rv.html
随机推荐
- 如何在nginx下实现访问web网站密码认证保护的功能
在某些特定的环境下,我们希望nginx下的web站点在访问时需要用户输入账户密码才能访问.以便拒绝那些不速之客. 其实,配置起来也很简单,按照下面的步骤即可实现. 一.编辑虚拟主机配置文件. serv ...
- Sword 哈希表
哈希表 哈希表是一种典型的以空间换取时间的数据结构,在没有冲突的情况下,对任意元素的插入.索引.删除的时间复杂度都是O().这样优秀的时间复杂度是通过将元素的key值以hash方法f映射到哈希表中的某 ...
- ubuntu apt-get 安装jdk
参考地址:https://blog.csdn.net/ywueoei/article/details/80335799 . https://blog.csdn.net/inhumming/articl ...
- MySQL使用存储过程实现判断表中字段或者索引是否存在,如果不存在则创建
使用存储过程可以保证数据库升级脚本可以重复执行而不会报错. CREATE TABLE `tb_user` ( `id` ) NOT NULL COMMENT '非自增id', `account` ) ...
- Linux(CentOS)安装JDK1.8
1.JDK的RPM包安装方式: https://www.cnblogs.com/hunttown/p/5450463.html 2.JDK的tar包安装方式: 首先,从SUN公司网站下载最新的JDK ...
- Operation之条件和布尔操作符
amb 当传入多个Observable到amb操作符时, 他将取第一个发生元素或产生事件的Observable, 然后只发出他的元素. 并且忽略其他的Observable let subject191 ...
- Python线程池及其原理和使用(超级详细)
系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 线程池在系统启动时即 ...
- c#之break和continue的区别
break:跳出循环,执行循环外的语句: continue:跳出此次循环,进入下一次循环:
- HTML登录注册页面简单实现
github:传送门 , 码云: 传送门 效果参考: 登录页面,注册页面 使用了bootstrap,jQuery. 后端使用的CGI处理表单,存入MySQL数据库.(之后更新) 登录页面源码 < ...
- C 语言 基础篇
1.机器语言 2.汇编语言 3.高级语言:C.C++.Java(基于虚拟机) C语言开发:Unix,Linux,Mac OS,iOS,Android,Windows,Ubuntu 开发环境:visua ...