我的javascript
JavaScript的简介:
1、定义:javascript是一门动态弱类型的解释型编程语言,增强页面动态效果,实现页面与用户之间的实时动态的交互。
javascript是由三部分组成:ECMAScript、DOM、BOM
- ECMAScript由ECMA-262定义,提供核心语言功能(ECMA是欧洲计算机制造商协会)
- DOM(Document Object Model)文档对象模型,提供访问和操作网页内容的方法和接口
- BOM(Browser Object Model)浏览器对象模型,提供与浏览器交互的方法和接口
2、文件的引入:
外部文件引入:
<script type"text/javascript" src="JS文件"></script>
存在于html的<head>或者<body>标签中。
<script type"text/javascript">
Js代码内容
</script>
3、javascript一般放在<body>标签的底部
- HTML代码从上到下执行,先加载CSS,避免html出现无样式状态;
- 将JavaScript代码块放在<body>最后,可以让网页尽快的呈现给用户,减少浏览者的等待时间,避免因为JS代码块阻塞网页的呈现。
变量:
需要注意的是:局部变量必须以 var 开头申明,如果不写 var 则为全局变量。
<script type="text/javascript"> // 全局变量
name = 'mk'; function func(){
// 局部变量
var age = 18; // 全局变量
gender = "man"
}
</script>
注:需要注意变量提升,就是把变量位置放到函数体的最上方。
运算符:
1、算术运算:
需要注意的是
"i++" == " i = i + 1" 先运算再赋值
"++i" == " " 先赋值再计算
1> 如果其中一个操作数是对象,则对象会转换为原始值:日期对象通过toString()方法执行转换,其他对象通过valueOf()方法执行转换。如果结果还不是原始值,则再使用toString()方法转换
2> 在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换成字符串,进行字符串拼接
3> 两个操作数都将转换成数字或NaN,进行加法操作
===:表示不光是内容相等,而且类型也相等。
数据类型:
特殊值:
null 表示一个空的对象指针,长用来描述空值。
undefined 表示变量没有被定义
1、数字
JavaScript中不区分整数和浮点数,所有数字均用浮点数值表示。
转换:
- parseInt(..) 将某值转换成整数,不成功则NaN
- parseFloat(..) 将某值转换成浮点数,不成功则NaN
特殊值:
- NaN,非数字。可以使用 isNaN(num) 来判断。
- Infinity,无穷大。可以使用 isFinite(num) 来判断。
2、字符串:
转移字符
\0 空字节
\n 换行
\t 制表
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号
3、布尔值:true || false
4、数组:类似于python中的列表
5、math
Math对象是一个静态对象,而不是构造函数。实际上,Math只是一个由Javascript设置的对象命名空间,用于存储数学函数。
作用是执行普通的算数任务。
常量 Math.E
常量e,自然对数的底数。 Math.LN10
10的自然对数。 Math.LN2
2的自然对数。 Math.LOG10E
以10为底的e的对数。 Math.LOG2E
以2为底的e的对数。 Math.PI
常量figs/U03C0.gif。 Math.SQRT1_2
2的平方根除以1。 Math.SQRT2
2的平方根。 静态函数 Math.abs( )
计算绝对值。 Math.acos( )
计算反余弦值。 Math.asin( )
计算反正弦值。 Math.atan( )
计算反正切值。 Math.atan2( )
计算从X轴到一个点的角度。 Math.ceil( )
对一个数上舍入。 Math.cos( )
计算余弦值。 Math.exp( )
计算e的指数。 Math.floor( )
对一个数下舍人。 Math.log( )
计算自然对数。 Math.max( )
返回两个数中较大的一个。 Math.min( )
返回两个数中较小的一个。 Math.pow( )
计算xy。 Math.random( )
计算一个随机数。 Math.round( )
舍入为最接近的整数。 Math.sin( )
计算正弦值。 Math.sqrt( )
计算平方根。 Math.tan( )
计算正切值。
math方法
语句:
1、条件语句:
if:语句
if(条件){ }else if(条件){ }else{ }
switch语句:
switch(name){
case 'nick':
age = 18;
break;
case 'jenny':
age = 21;
break;
default :
age = 0;
}
2、循环语句:for、for in、while、do-while
for循环:
var names = ["nick", "jenny"]; for(var i=0;i<names.length;i++){
console.log(i); //索引
console.log(names[i]);
}
for in循环:
var names = ["nick", "jenny"]; for(var index in names){
console.log(index);
console.log(names[index]);
}
while循环:
while(条件){
// break;
// continue;
}
do while循环:
//循环的代码至少执行一次,结果为1 var num = 0;
do {
num++;
}while (num>10);
3、lable语句:
label 语句可以理解为跳出任意循环
//输出结果为95 <script>
var num = 0;
for (var i=0;i<10;i++) {
for (var j=0;j<10;j++) {
if (i==5 && j==5) {
break;
}
num++;
}
}
console.log(num);
</script>
未加label实例
//输出结果为55
//i和j都循环为到5时,跳出了两层循环 <script>
var num = 0;
outPoint:
for (var i=0;i<10;i++) {
for (var j=0;j<10;j++) {
if (i==5 && j==5) {
break outPoint;
}
num++;
}
}
console.log(num);
</script>
加label实例
4、异常处理:主动跑出异常 throw Error('xxxx')
try {
//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
//e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
//无论上述代码怎么,finally代码块始终会执行
}
函数:
在Javascript中函数有三种定义方式:
// 普通函数
function func(arg){
return true;
} // 匿名函数
var func = function(arg){
return "nick";
} // 自执行函数
(function(arg){
console.log(arg);
})('nick')
函数的参数:
函数传参的个数可以小于实际需传参的个数,没传参的默认为undefined
参数传多默认不起作用
function man(name,age) {
console.log(name,age);
}
man("nk",18); //nk 18
man("nk"); //nk undefined
man("nk",18,19); //nk 18
arguments 可接收所有参数,返回一个数组
function man() {
console.log(arguments);
}
man("nk",18); //["nk", 18]
man("nk"); //["nk"]
man("nk",18,19); //["nk", 18, 19]
函数的作用域与作用域链:
注意:
在javascript中,没有块级作用域:
var name = 'nk';
(function Main(){
console.log(name);//undefined
if(1){
var name = 'jenny';
}
console.log(name);//jenny
})();
console.log(name);//nk //输出结果第一个为undefined
//声明需提前(Hoisting),在JavaScript引擎“预编译”时进行,函数在被执行之前,会将其中的变量全部声明,而不赋值
作用域链:
每个构造函数都有一个内部对象指针,指向原型对象,而原型对象也包含一个指向构造函数的指针。如此层层递进,形成作用域链条
var name = 'nk';
function Main() {
function F1(){
var name = 'jenny';
console.log(name);//jenny
}
function F2() {
console.log(name);//nk
}
F1();
F2();
}
Main(); // 从内到外的优先级寻找
// F2() 的作用域链为 F2()-->Main()
闭包:
闭包就是能够读取其他函数内部变量的函数
function f1(){
var n=1;
Add=function(){
n++;
};
function f2(){
console.log(n);
}
return f2;
}
var result=f1();
result(); //1
Add();
result(); //2 //result就是闭包f2函数
//函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清
闭包使函数中的变量都被保存在内存中,内存消耗大,所以少用闭包,否则会造成网页的性能低,在IE中可能导致内存泄露。
所以在退出函数之前,将不使用的局部变量全部删除
面向对象:
面向对象的三大特性:
封装:隐藏代码实现的细节,实现代码的模块化
继承:扩展已经存在的代码模块,实现代码重用
多态:接口的不同实现方式,实现接口重用
关键字:
this 代指此时的对象
new 创建对象时必须使用
构造函数模式:
function Foo (name,age) {
this.Name = name;
this.age = age;
this.Func = function () {
return this.Name + this.age
}
}
var obj = new Foo("nick",18);
var ret = obj.Func();
console.log(ret);
var obj2 = new Foo("jenny",21);
上述模式把同样的函数封装到了不同对象,造成了内存浪费。
原型模式(prototype):
function Foo(name,age) {
this.Name = name;
this.Age = age;
}
Foo.prototype = {
GetInfo: function () {
var str = " is good";
return this.Name + str;
},
Func: function () {
return this.Name + this.Age;
}
};
var obj = new Foo("nick",18);
console.log(obj.Name);//nick
console.log(obj.Age);//18
var ret = obj.GetInfo();
console.log(ret);//nick is good
var ret2 = obj.Func();
console.log(ret2);//nick18
var obj2 = new Foo("nick",18);
所有的构造函数的prototype属性都指向另一个对象(同一块内存地址),这个对象的所有属性和方法,都会被构造函数的实例继承。
Prototype模式的验证方法:
1. isPrototypeOf()
用来判断一个对象是否存在于另一个对象的原型链中
Foo.prototype.isPrototypeOf(obj)
true
Foo.prototype.isPrototypeOf(obj2)
true
2. hasOwnProperty()
用来判断某一个对象(不包括原型链)是否具有指定属性。
obj.hasOwnProperty('Name')
true
obj.hasOwnProperty('Age')
true
3. in运算符
判断某个实例是否具有某个属性
'Name' in obj
true
'Age' in obj
true
其他:
1、序列化
- JSON.stringify(obj) 序列化
- JSON.parse(str) 反序列化
2、转义
- decodeURI( ) URl中未转义的字符
- decodeURIComponent( ) URI组件中的未转义字符
- encodeURI( ) URI中的转义字符
- encodeURIComponent( ) 转义URI组件中的字符
- escape( ) 对字符串转义
- unescape( ) 给转义字符串解码
- URIError 由URl的编码和解码方法抛出
3、eval
JavaScript中的eval既可以运行代码也可以获取返回值
a = eval('1+1');
console.log(a); //2
- eval()
- EvalError 执行字符串中的JavaScript代码
4、正则表达式
var p = /nk/g;
console.log(p.test('nkjennynk')); // true
console.log(p.exec('nkjennynk')); // ["nk", index: 0, input: "nkjennynk"]
JavaScript中支持正则表达式,其主要提供了两个功能:
- test(string) 用于检测正则是否匹配
- exec(string) 用于获取正则匹配的内容
匹配模式:
g:表示全局(global)模式,匹配所有字符串,不会匹配到第一项时停止
i:表示不区分大小写(case-insensitive)模式
m:表示多行(multiline)模式,到达一行文本末尾时还会继续查找下一行中是否存在匹配的项
括号分组:
console.log(/(n)k/.exec('nkjenny')); // console.log(/(n)k/.exec('nkjenny'))
console.log(/(n)k{2}/.exec('nkkjenny')); // ["nkk", "n", "i", index: 0, input: "nkkjenny"]
元字符 名称 匹配对象
. 点号 单个任意字符(除回车\r、换行\n、行分隔符\u2028和段分隔符\u2029外)
[] 字符组 列出的单个任意字符
[^] 排除型字符组 未列出的单个任意字符
? 问号 匹配0次或1次
* 星号 匹配0交或多次
+ 加号 匹配1次或多次
{min,max} 区间量词 匹配至少min次,最多max次
^ 脱字符 行的起始位置
$ 美元符 行的结束位置
| 竖线 分隔两边的任意一个表达式
() 括号 限制多选结构的范围,标注量词作用的元素,为反向引用捕获文本
\1,\2... 反向引用 匹配之前的第一、第二...组括号内的表达式匹配的文本
匹配规则
\d 数字,等同于[0-9]
\D 非数字,等同于[^0-9]
\s 空白字符
\S 非空白字符
\w 字母、数字、下划线,等同于[0-9A-Za-z_](汉字不属于\w)
\W 非字母、数字、下划线,等同于[^0-9A-Za-z_]
5、时间处理:
时间操作中有两种时间:
- 时间统一时间
- 本地时间(东8区)
Date 操作日期和时间的对象
Date.getDate( ) 返回一个月中的某一天
Date.getDay( ) 返回一周中的某一天
Date.getFullYear( ) 返回Date对象的年份字段
Date.getHours( ) 返回Date对象的小时字段
Date.getMilliseconds( ) 返回Date对象的毫秒字段
Date.getMinutes( ) 返回Date对象的分钟字段
Date.getMonth( ) 返回Date对象的月份字段
Date.getSeconds( ) 返回Date对象的秒字段
Date.getTime( ) 返回Date对象的毫秒表示
Date.getTimezoneOffset( ) 判断与GMT的时间差
Date.getUTCDate( ) 返回该天是一个月的哪一天(世界时)
Date.getUTCDay( ) 返回该天是星期几(世界时)
Date.getUTCFullYear( ) 返回年份(世界时)
Date.getUTCHours( ) 返回Date对象的小时字段(世界时)
Date.getUTCMilliseconds( ) 返回Date对象的毫秒字段(世界时)
Date.getUTCMinutes( ) 返回Date对象的分钟字段(世界时)
Date.getUTCMonth( ) 返回Date对象的月份(世界时)
Date.getUTCSeconds( ) 返回Date对象的秒字段(世界时)
Date.getYear( ) 返回Date对象的年份字段(世界时)
Date.parse( ) 解析日期/时间字符串
Date.setDate( ) 设置一个月的某一天
Date.setFullYear( ) 设置年份,也可以设置月份和天
Date.setHours( ) 设置Date对象的小时字段、分钟字段、秒字段和毫秒字段
Date.setMilliseconds( ) 设置Date对象的毫秒字段
Date.setMinutes( ) 设置Date对象的分钟字段和秒字段
Date.setMonth( ) 设置Date对象的月份字段和天字段
Date.setSeconds( ) 设置Date对象的秒字段和毫秒字段
Date.setTime( ) 以毫秒设置Date对象
Date.setUTCDate( ) 设置一个月中的某一天(世界时)
Date.setUTCFullYear( ) 设置年份、月份和天(世界时)
Date.setUTCHours( ) 设置Date对象的小时字段、分钟字段、秒字段和毫秒字段(世界时)
Date.setUTCMilliseconds( ) 设置Date对象的毫秒字段(世界时)
Date.setUTCMinutes( ) 设置Date对象的分钟字段和秒字段(世界时)
Date.setUTCMonth( ) 设置Date对象的月份字段和天数字段(世界时)
Date.setUTCSeconds( ) 设置Date对象的秒字段和毫秒字段(世界时)
Date.setYear( ) 设置Date对象的年份字段
Date.toDateString( ) 返回Date对象日期部分作为字符串
Date.toGMTString( ) 将Date转换为世界时字符串
Date.toLocaleDateString( ) 回Date对象的日期部分作为本地已格式化的字符串
Date.toLocaleString( ) 将Date转换为本地已格式化的字符串
Date.toLocaleTimeString( ) 返回Date对象的时间部分作为本地已格式化的字符串
Date.toString( ) 将Date转换为字符串
Date.toTimeString( ) 返回Date对象日期部分作为字符串
Date.toUTCString( ) 将Date转换为字符串(世界时)
Date.UTC( ) 将Date规范转换成毫秒数
Date.valueOf( ) 将Date转换成毫秒表示
Date 方法
我的javascript的更多相关文章
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- 读书笔记:JavaScript DOM 编程艺术(第二版)
读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...
- 《Web 前端面试指南》1、JavaScript 闭包深入浅出
闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
今天为大家分享一下我自己制作的浏览器滚动条,我们知道用css来自定义滚动条也是挺好的方式,css虽然能够改变chrome浏览器的滚动条样式可以自定义,css也能够改变IE浏览器滚动条的颜色.但是css ...
- JavaScript进阶之路(一)初学者的开始
一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...
- 梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能. 一.两者的主要区别 先开门见山的说说两者之间的区别. 1)CSS动画: 基于CSS的动 ...
随机推荐
- Android AAR 混淆的坑
一定不要忘记加上这段 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,A ...
- luogu2805 [NOI2009]植物大战僵尸
想象一下,要搞掉一个植物,必须先搞掉另一些植物--我们可以发现这是一个最大权闭合子图的问题. 最大权闭合子图的话,太空飞行计划问题是一个入门题,可以一看. 然而我们手玩一下样例就会惊恐地发现,保护关系 ...
- 【LeetCode】Intersection of Two Linked Lists(相交链表)
这道题是LeetCode里的第160道题. 题目讲的: 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, ...
- Leetcode 376.摆动序列
摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个 ...
- hdu2084
老题目了 #include <stdio.h> int main(){ ][]; int i,j,max; int c,n; scanf("%d",&c); w ...
- 九度oj 题目1214:丑数
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: ...
- HackerRank# Candies
原题地址 LeetCode上也有这道题,直接扫一遍就行了,连数组都不用开,感觉像是蕴含了某种动归的思想在里面,要不怎么是个动归题呢 代码: #include <cmath> #includ ...
- BZOJ 3779 重组病毒 ——LCT 线段树
发现操作一很像一个LCT的access的操作. 然后答案就是路径上的虚边的数量. 然后考虑维护每一个点到根节点虚边的数量, 每次断开一条偏爱路径的时候,子树的值全部+1, 连接一条偏爱路径的时候,子树 ...
- uva 11178二维几何(点与直线、点积叉积)
Problem D Morley’s Theorem Input: Standard Input Output: Standard Output Morley’s theorem states tha ...
- 送外卖(codevs 2800)
题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号城市出发,然后n个城市都要走一 ...