js基础一
1、声明提升:变量的声明提升,函数的声明提升,但函数赋值表达式不会提升;
foo(); // 正常运行,因为foo在代码运行前已经被创建
function foo() {}
foo(); // 出错:TypeError
var foo = function() {};
2、判断变量是否为undefined
if(typeof(a)==undefined) 或if(window.a==undefined)
3、bar
函数声明外是不可见的,这是因为我们已经把函数赋值给了 foo
; 然而在 bar
内部依然可见。这是由于 JavaScript 的 命名处理 所致, 函数名在函数内总是可见的
var foo = function bar() { bar(); // 正常运行 } bar(); // 出错:ReferenceError
4、阻止默认事件(比如给a标签添加点击事件后,不然其跳转)可以在自定义事件处理程序中调用下面方法:
event.preventDefault();
5、回调函数callback:函数作为参数传递,在父函数执行完后执行。
无参的回调函数:$.get( "myhtmlpage.html", myCallBack );
有参的回调函数:
$.get( "myhtmlpage.html", function() {
myCallBack( param1, param2 );
});
$.get( "myhtmlpage.html", myCallBack( param1, param2 ) );
这样写回调函数会立即执行,并把返回结果作为父函数的第二个参数。
6、事件处理函数中的this指向,被点击(准确说在哪个元素上触发的事件,这里就是指这个元素的dom对象)的元素。
7、事件处理函数可以接受一个event对象的参数,这个对象可以用于确定事件的性质,和防止事件的默认行为(event.preventDefault();)。
8、数据类型:
ECMAScript中有:
5种中简单数据类型(也称基本数据类型):Undefined、Null、Boolean、Number和String
1种复杂类型:Object (本质是一组无序的键值对组成)。(备注:js自带的Array、Date、RegExp也是Object类型)
ECMAScript不支持任何创建自定义类型的机制,所有值最终都是上述6种类型之一。
由于ECMAScript数据类型具有动态性,所以的确没有再定义其它数据类型的必要啦
9、js中的正则,RexExp类型
字面表达式: var pattern1=/正则表达式字符串/标志(g、i、m)
new表达: var pattern2=new RegExp("正则表达式字符串",“g|i|m")
RegExp实例属性:
global 布尔值,是否使用了g标志位
ignoreCase 布尔值,。。。i标志位
multiline 。。。m标志位
source,正则表达式的字符串表示(字面值)
RegExp实例方法:
exec(要使用正则去匹配的字符串 )
tes
10、 js中的对象属性:
属性类型:数据属性、访问器属性
数据属性:(类似C#中的字段)包含一个数据值的位置,可以读取和写入,有4个内部特性(供解析器使用):[[configurable]]、[[enumerable]]、[[writable]]、[[value]]
访问器属性:(类似C#中的属性),不包含数据值,可包含一对set(写时用)、get(读用)函数,也有4个内部特性:[[configurable]]、[[enumerable]]、[[get]]、[[set]]
一次定义多个属性:Object.defineProperties(对象,{属性名:{属性特性对象},。。。})
如:var book={}; Object.defineProperties(book,{name:{value:'C#高级编程',writable:false},author:{value:'lxf',configurable:true}})
book.name //c#高级编程
查看属性特性:
Object.getOwnPropertyDescriptor(book,"author") //Object {value: "lxf", writable: false, enumerable: false, configurable: true}
11、undefined null 0在布尔类型环境中会被当做false来对待。
undefined在Number类型环境中会被当做 NaN
null在Number类型环境当中会被当做0看待
12、
变量的域
在所有函数之外声明的变量,叫做全局变量,因为它可被当前文档中的其他代码所访问。在函数内部声明的变量,叫做局部变量,因为它只能在该函数内部访问。js没有块左右域的概念。
全局变量
全局变量实际上是全局对象(window)的属性。在网页中,(译注:缺省的)全局对象是 window
,所以你可以用形如window.variable
的语法来设置和访问全局变量
定义全局变量的3种方式:
1、var mm;在function外部定义
2、mm=123;在function内外部(注:在function内部只有当该function被调用后 该变量才被定义)
3、使用window对象属性:window.mm
常量
你可以用关键字 const 创建一个
只读的常量。常量标识符的命名规则和变量的相同:必须以字母、下划线或美元符号开头并可以包含有字母、数字或下划线。
const prefix = '212';//常量在赋值后不可以改变
13、特殊运算符:
条件运算符:a>b?a:b
delete、in、instanceof、typeof、new、this、void(执行一个js表达式(一条语句),但返回undefined,后面括号可省略)
14.js中的绝大多数语句(如,if语句 for语句,while语句 do while语句 switch语句)和js中相同。
细微区别:for each 语句有空格分开写的
try语句块中有异常要自己用thorw语句显示抛出异常,否则catch语句捕捉不到
15、Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组。如,每个Dom元素的children属性
1 var a={length:2,0:'first',1:'second'};
2 Array.prototype.slice.call(a);// ["first", "second"]
4 var a={length:2};
5 Array.prototype.slice.call(a);// [undefined, undefined] 16.动态脚本和样式(备注:需要在页面加载完成后调用)
function loadScript(url)
{
var script=document.createElement("script");
script.type="text/javascript";
script.src=url+"?v="+Date.now();
document.body.appendChild(script);
}
function loadStyle(url)
{
var link=document.createElement("link");
link.rel="stylesheet";
link.type="text/css";
link.href=url+"?v="+Date.now();
var head=document.getElementsByTagName("head")[0];
head.appendChild(link);
}
17、当默认事件用 return false阻止不了时:
请用: window.event.returnValue = false;
18、Object.keys(object)获取对象的所有属性和方法名称。返回值:一个数组,其中包含对象的可枚举属性和方法的名称。
备注对象的属性不仅可以使用“.”获取,还可以使用[属性名称]获取 并且后者支持更强大,支持变量,支持属性名为数值。
19、js中的this工作原理:
1)全局范围内|函数调用foo():this指向全局对象即window
2)对象方法调用:this指向该对象 如test.foo(); 方法中this则指向test对象
3)调用构造函数 this指向新创建的对象
4)当使用 Function.prototype
上的 call
或者 apply
方法时,函数内的 this
将会被 显式设置为函数调用的第一个参数。
function foo(a, b, c) {}
var bar = {};
foo.apply(bar, [1, 2, 3]); // 数组将会被扩展,如下所示
foo.call(bar, 1, 2, 3); // 传递到foo的参数是:a = 1, b = 2, c = 3
此时foo函数中的this都是bar对象
20、js中变量 作用域:
//js是没有块级作用域的 如在if代码块内定义的变量 在其外部同一作用域内同样可访问
//js只有两种作用域: 函数作用域(即局部作用域)和全局作用域。而局部变量只能通过,一个是作为函数参数,另一个是函数内部通过 var 关键字声明。当全局变量和局部变量同名时两者互不影响。
//js变量声明会被提前的 但赋值不会 即一个作用域内任何地方声明的变量 在这个作用域内任何地方都可以访问。
21、全局变量和window属性的区别:
全局变量不能用delete删除 window属性则可以
访问一个不存在的全局变量会报“Uncaught ReferenceError: ** is not defined”错误 ,而以window属性的方式访问不存在的对象只会返回undefined 不会报错(所以建议用window.xx)
js基础一的更多相关文章
- js 基础篇(点击事件轮播图的实现)
轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...
- js 基础
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...
- js基础练习二之简易日历
今天学到了js基础教程3,昨天的课后练习还没来的及做,这个是类似简易日历的小案例,视频还没听完,今晚继续...... 先看效果图: 其实做过前面的Tab选项卡,这个就很好理解了,通过鼠标放在不同月份月 ...
- [JS复习] JS 基础知识
项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display :inline or bloc ...
- JS基础(超级简单)
1 JS基础(超级简单) 1.1 数据类型 1.1.1 基本类型: 1) Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2) ...
- Node.js基础与实战
Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...
- js基础到精通全面教程--JS教程
适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人 基础知识:HTML JavaScript就这么回事1:基础知识 1 创建脚本块 1: <script language=”J ...
- JS基础知识总结
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划() ...
- js基础篇——call/apply、arguments、undefined/null
a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...
- js基础知识总结(2016.11.1)
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...
随机推荐
- noj [1480] 懒惰的风纪委Elaine (多重背包)
http://ac.nbutoj.com/Problem/view.xhtml?id=1480 [1480] 懒惰的风纪委Elaine 时间限制: 1000 ms 内存限制: 65535 K 问题描述 ...
- Oracle11g用户密码过期
今天一早来了,发现部署的网站访问报500,看日志,显示数据库连不上.然后我用sqldeveloper登录同样登不上,于是想到了之前碰到过的一个问题,Oralce11g的新特性:密码180天自动过期.随 ...
- JavaScript 找出数组中重复的元素
实现检测数组重复元素的功能,需要注意一点的是,多个(2个或2个以上)重复元素,我们只需要挑出一个来就可以了. <!DOCTYPE html> <html> <head&g ...
- oracle srvctl 命令
SRVCTL命令可以控制RAC数据库中的instance,listener以及services. 通常SRVCTL在ORACLE用户下执行.下面我们来介绍srvctl命令. 1.通过SRVCTL命令来 ...
- Java 8 vs. Scala(二):Stream vs. Collection
[编者按]在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比.在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要 ...
- SQL Server 索引结构及其使用(一)
转载:SQL Server 索引结构及其使用(一) 作者:freedk 一.深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clus ...
- 汉字与区位码互转(天天使用的String存储的是内码),几个常见汉字编码,附有读书笔记
汉=BABA(内码)=-A0A0=2626(区位码)字=D7D6(内码)=-A0A0=5554(区位码) 各种编码查询表:http://bm.kdd.cc/ “啊”字是GB2312之中的第一个汉字,会 ...
- 【HDOJ】1098 Ignatius's puzzle
数学归纳法,得证只需求得使18+ka被64整除的a.且a不超过65. #include <stdio.h> int main() { int i, j, k; while (scanf(& ...
- Oracle中的阻塞锁SQL(阻塞在哪个数据上)
SELECT ( '节点 ' || a.inst_id || ' session ' || a.sid || ...
- bzoj1143 2718
最小可相交路径覆盖 先预处理可到达的点然后转化为最小不相交路径覆盖 type node=record point,next:longint; end; ..] of node; ...