JQuery官方学习资料(译):类型
- 类型
- String
在JavaScript中字符串是一个不可变的对象,它包含无、一个或多个字符。它的类型称之为“string”。
| typeof"some string"; // "string" |
- 引号
一个字符串可以使用单引号或双引号来定义,你可以在双引号内或周围嵌套使用单引号,如果要在双引号内使用双引号(或者单引号内使用单引号),必须嵌套使用反斜杠进行转义。
"You make 'me' sad."'That\'s "cranking" good fun!'"<a href=\"home\">Home</a>" |
- 内置方法
在JavaScript中有一些内置方法可以操作字符串。通常结果总是返回一个新的字符串,或返回一个array。
"hello".charAt( 0 ) // "h""hello".toUpperCase() // "HELLO""Hello".toLowerCase() // "hello""hello".replace( /e|o/g, "x" ) // "hxllx""1,2,3".split( "," ) // [ "1", "2", "3" ] |
- Length属性
所有的字符串都有一个length属性(长度属性)。
"Hello".length // 5"".length // 0 |
- 默认布尔值
一个空字符串默认为false。
!"" // true!!"" // false!"hello" // false!"true" // false!new Boolean( false ) // false |
- htmlString
当一个字符串在JQuery文档中代表一个或多个DOM元素时,通常被创建和插入到文档中时,这个字符串将被当作htmlString。当被作为一个JQuery()方法参数传递的时候,这个字符串将会被当作是HTML。
// 追加<b>hello</b>:$( "<b>hello</b>" ).appendTo( "body" );// 追加<b>hello</b>:$( "<b>hello</b>bye" ).appendTo( "body" );// 语法错误, unrecognized expression: bye<b>hello</b>$( "bye<b>hello</b>" ).appendTo( "body" );// 追加bye<b>hello</b>:$( $.parseHTML( "bye<b>hello</b>" ) ).appendTo( "body" );// 追加<b>hello</b>wait<b>bye</b>:$( "<b>hello</b>wait<b>bye</b>" ).appendTo( "body" ); |
- Number
在JavaScript中的Number是双精度64位IEEE754格式化的值。仅仅作为字符串的时候,它们是不可改变的。对于Number类型的数据所有的运算符都是基于C语言的方式进行运算的。
typeof 12 // "number"typeof 3.543 // "number" |
- 默认布尔值
如果一个数字是0,那么它默认为false。
!0 // true!!0 // false!1 // false!-1 // false |
由于是双精度运行,下面这个结果不算是一个错误
| 0.1 + 0.2// 0.30000000000000004 |
- Math
JavaScript提供了数学对象中的数字通用功能。
Math.PI // 3.141592653589793Math.cos( Math.PI ) // -1 |
- 数字解析
parseInt和parseFloat可以用于解析字符串为数字,如果不指定两者是做隐式转换的。
parseInt( "123" ) = 123 // (隐式十进制)parseInt( "010" ) = 8 // (隐式八进制)parseInt( "0xCAFE" ) = 51966 // (隐式十六进制)parseInt( "010", 10 ) = 10 // (显示十进制)parseInt( "11", 2 ) = 3 // (显示二进制)parseFloat( "10.10" ) = 10.1 |
- Numbers与Strings
当数字加一个字符串时,结果始终是一个字符串,而运算符方式是一样的,这是需要注意的,如果你想先进行数字运算再附加到一个字符串,那么数字运算需要用括号包裹起来。
"" + 1 + 2; // "12""" + ( 1 + 2 ); // "3""" + 0.0000001; // "1e-7"parseInt( 0.0000001 ); // 1 (!) |
或者你要使用JavaScript提供的String类,可以解析一个数字为字符串。
String( 1 ) + String( 2 ); // "12"String( 1 + 2 ); // "3" |
- NaN和Infinity
解析一个不是数字的东西时结果是NaN,isNaN方法可以帮助你判断结果是否是NaN。
parseInt( "hello", 10 ) // NaNisNaN( parseInt("hello", 10) ) // true |
| 1 / 0// Infinity |
typeof NaN // "number"typeof Infinity // "number" |
需要注意的是NaN的一种奇怪的比较,它与它自己比较是不同的。
| NaN == NaN// false (!) |
但是Infinity的比较是不同的。
| Infinity == Infinity// true |
- Integer
整数是一个普通的数字类型,但每当明确指明的时候,表示数字是一个非浮点数。
- Float
浮点数也是一个普通的数字类型,但每当明确指明的时候,就表示数字是一个浮点数。
- Boolean
if ( true ) console.log( "always!" );if ( false ) console.log( "never!" ); |
- Object
在JavaScript中一切都是对象。最简单的创建对象的方式是对象文字。
var x = {};var y = { name: "Pete", age: 15}; |
对象的类型是Object。
| typeof {} // "object" |
- 点符号
你可以使用点符号读取和写入对象的属性。
y.name // "Pete"y.age // 15x.name = y.name + " Pan" // "Pete Pan"x.age = y.age + 1 // 16 |
- 数组符号
或许你读写对象的属性是通过数组符号,它允许你动态的选择对象的属性。
var operations = { increase: "++", decrease: "--"};var operation = "increase";operations[ operation ] // "++"operations[ "multiply" ] = "*"; // "*" |
- 迭代
通过for-in-loop就可以简单的实现对象的迭代。
var obj = { name: "Pete", age: 15};for( key in obj ) { alert( "key is " + [ key ] + ", value is " + obj[ key ] );} |
需要注意的是for-in-loop可能会在延伸使用到Object.prototype的时候出现问题,例如Object.prototype被人更改了。
jQuery.each( obj, function( key, value ) { console.log( "key", key, "value", value );}); |
缺点是回调被调用在迭代值的上下文中,因此你失去了原有对象的上下文。
- 默认布尔值
一个对象,无论它是否有属性,默认值永远不会为false。
!{} // false!!{} // true |
- 原型
所有的对象都有原型(prototype)属性,每当把它当做属性的时候,如果在对象上找不到这个属性它仍然会在对象的原型上进行检查,JQuery广泛的使用原型将方法添加到JQuery实例上。JQuery使用jQuery.fn作为jQuery.prototype的别名,你可以使用其中的任意一个
var form = $("#myform");console.log( form.clearForm ); // undefined// jQuery.fn == jQuery.prototypejQuery.fn.clearForm = function() { return this.find( ":input" ).each(function() { this.value = ""; }).end();};// 所有的JQuery对象实例都可以运行,因为新的方法已经被添加到原型上了console.log( form.clearForm ); form.clearForm(); |
- Array
在JavaScript中数组是可变化的,并且有一些内置方法可以使用。
var x = [];var y = [ 1, 2, 3 ];typeof []; // "object"typeof [ 1, 2, 3 ]; // "object"x[ 0 ] = 1;y[ 2 ] // 3 |
- 迭代
在数组的迭代中length属性是非常有用的。
for ( var i = 0; i < a.length; i++ ) { // a[i]} |
当性能是至关重要的时候,只读取一次length属性可以帮助运行速度的提升。
for ( var i = 0, j = a.length; i < j; i++ ) { // a[i]} |
另外还有一种情况是在迭代语句中定义变量来存储数组当前迭代的元素,在循环体中不再使用数组元素而是这个变量。
for ( var i = 0, item; item = a[i]; i++ ) { // 使用item变量} |
JQuery提供了each方法可以迭代数组的每个元素,这个方法对于迭代对象的属性也是适用的。
var x = [ 1, 2, 3 ];jQuery.each( x, function( index, value ) { console.log( "index", index, "value", value );}); |
length属性可以用来作为序号将元素加入到数组的末尾。
var x = [];x.push( 1 );x[ x.length ] = 2;x // [ 1, 2 ] |
数组还有很多的内置方法。
var x = [ 0, 3, 1, 2 ];x.reverse() // [ 2, 1, 3, 0 ]x.join(" – ") // "2 - 1 - 3 - 0"x.pop() // [ 2, 1, 3 ]x.unshift( -1 ) // [ -1, 2, 1, 3 ]x.shift() // [ 2, 1, 3 ]x.sort() // [ 1, 2, 3 ]x.splice( 1, 2 ) // [ 2, 3 ] |
- 默认布尔值
一个数组,无论它有没有元素,也永远不会默认为false。
![] // false!![] // true |
- Array<Type> 符号
在JQuery的API中,经常可以发现有Array<Type>符号。这样可以指定数组元素的预期类型,类似于.NET中的泛型。
dragPrevention Array<String> |
- PlainObject
PlainObject是一个JavaScript对象,包含了0个或多个键值对。
var a = []; var d = document; var o = {}; typeof a; // object typeof d; // object typeof o; // object jQuery.isPlainObject( a ); // false jQuery.isPlainObject( d ); // false jQuery.isPlainObject( o ); // true |
- Function
一个函数(方法)在JavaScript中可以是命名的或者是匿名的。任何一个函数都可以分配给一个变量,或传递给一个函数,但是通过传递成员函数这样的方式可以使他们被另一个对象的上下文调用。函数的类型是“function”。
function named() {}var handler = function() {} |
JQuery代码中的匿名函数是大量可见的。
$( document ).ready(function() {});$( "a" ).click(function() {});$.ajax({ url: "someurl.php", success: function() {}}); |
- 参数
在函数中有一种特殊的变量,那就是参数,它是一种伪数组形式的元素。
function log( x ) { console.log( typeof x, arguments.length );}log(); // "undefined", 0log( 1 ); // "number", 1log( "1", "2", "3" ); // "string", 3 |
参数对象都有一个callee属性,它指向的是实例内部的函数。
var awesome = function() { return arguments.callee; }awesome() == awesome // true |
- 上下文
在JavaScript中,this总是指向当前上下文,默认情况下this指向的是window对象,在一个函数内this的上下文就会发生改变,这种改变取决于函数是如何被调用的。
$( document ).ready(function() { // this指向window.document});$( "a" ).click(function() { // this指向DOM中的a标签元素}); |
你可以指定一个函数的上下文来使用函数的内置方法call或者apply。两者的区别在于如何传递参数,call将所有的参数作为一个arguments传递给函数,而apply接收一个arguments数组作为参数。
function scope() { console.log( this, arguments.length );}scope() // window, 0scope.call( "foobar", [ 1, 2 ] ); // "foobar", 1scope.apply( "foobar", [ 1, 2 ] ); // "foobar", 2 |
- 作用域
在JavaScript中,所有函数内部定义的变量都仅仅在该函数的作用域内是有效的。
var x = 0;(function() { var x = 1; console.log( x ); // 1})();console.log( x ); // 0 |
- 闭包
闭包是对作用域范围的扩展,闭包让函数可以在外部访问该函数被创建的作用域内的变量。这种模式允许你创建对象后通过方法来操作对象内部的变量,这些变量是外部不可见的,这也正是面向对象编程的基础。
function create() { var counter = 0; return { increment: function() { counter++; }, print: function() { console.log( counter ); } }}var c = create();c.increment();c.print(); // 1 |
- 代理模式
在JavaScript中有一种代理模式,为其他对象提供一种代理以控制对这个对象的访问,可以实现基本的面向方面编程(AOP)。
- 回调
回调就是在一个函数中传递一些函数作为其参数。JQuery的事件系统就是使用函数回调来实现的。
$( "body" ).click(function( event ) { console.log( "clicked: " + event.target );}); |
回调的返回值是可选的,例如防止表单提交,我们可以通过事件来进行处理。
$( "#myform" ).submit(function() { return false;}); |
- Selector
在JQuery中一个selector是被用来选择DOM文档中的元素,这文档一般是在浏览器中,除此之外通过AJAX接收的XML文档也是适用的。
- Event
JQuery事件系统是根据W3C标准标准化事件对象的,事件对象是被确保传递给事件处理器的。
- Element
在DOM中的一个元素可以有属性、文本和子节点。它提供了方法可以遍历父节点和子节点,并获取它们的属性。JQuery提供了帮助元素与DOM交互的方法。
$( ":text" ).blur(function() { if( !this.value ) { alert( "Please enter some text!" ); }}); |
- jQuery
JQuery对象包含一个DOM元素的集合。JQuery经常使用CSS样式中的选择器来匹配文档中的元素,设置JQuery对象中的元素经常被称之为设置“匹配元素”或者“已选元素”。
| $( "p" ).css( "color", "red" ).find( ".special" ).css( "color", "green" ); |
每当你使用JQuery的链式调用函数时,如果你想返回到当前元素之前的那个元素,那么你可以使用.end()方法。
- XMLHttpRequest
一些jQuery的AJAX函数返回的是本地的XMLHttpRequest(XHR)对象,而XMLHttpRequest正是AJAX的核心对象,其主要功能是与服务端进行数据交互。
- XML Document
- 类型检查
var myValue = [ 1, 2, 3 ];// 使用JavaScript的typeof来测试类型typeof myValue === "string"; // falsetypeof myValue === "number"; // falsetypeof myValue === "undefined"; // falsetypeof myValue === "boolean"; // false// 使用全等于运算符判断是否为nullmyValue === null; // false// 使用Jquery的方法检查类型jQuery.isFunction( myValue ); // falsejQuery.isPlainObject( myValue ); // falsejQuery.isArray( myValue ); // true |
JQuery官方学习资料(译):类型的更多相关文章
- JQuery官方学习资料(译):Data方法
你可能经常会想需要通过元素来存储一些数据.在JavaScript中你可能需要给元素添加属性来实现这样的功能,但是在某些浏览器中,你可能还需要处理因此造成的内存泄露问题.JQuery提供了一个简 ...
- JQuery官方学习资料(译):JQuery对象
每当创建一个新的元素(或者选择一个已经存在的元素)时,JQuery将返回一个元素的集合.大部分的开发人员新接触JQuery的时候,都把这个集合当做数组.这个集合中的DOM元素有从零开始的索引, ...
- JQuery官方学习资料(译):选择元素
选择元素 JQuery最基本的概念是“选择一些元素并让它们做些什么”.JQuery支持大部分的CSS3的选择器,以及一些非标准的选择器. 通过ID选择元素 $( "#myId&quo ...
- JQuery官方学习资料(译):使用JQuery的.index()方法
.index()是一个JQuery对象方法,一般用于搜索JQuery对象上一个给定的元素.该方法有四种不同的函数签名,接下来将讲解这四种函数签名的具体用法. 无参数的.index() < ...
- JQuery官方学习资料(译):遍历JQuery对象和非JQuery对象
JQuery提供了一个对象遍历的Utility方法$.each()和一个JQuery集合遍历方法.each(). $.each() $.each()是一个通用的方法用来遍历对象和数组, ...
- JQuery官方学习资料(译):Utility方法
JQuery提供了一些utility方法在$命名空间里,这些方法对完成常规的编程任务非常有帮助. $.trim() 删除前后部的空白内容. // 返回 "lots of ex ...
- JQuery官方学习资料(译):CSS
JQuery提供了一个处理方法,可以获取或设置元素的CSS属性. // 获取 CSS 属性 $( "h1" ).css( "fontSize" ); / ...
- JQuery官方学习资料(译):遍历
一旦你通过JQuery创建了选择器,你就可以对此进行更为深入的遍历.遍历可以分为三个基本组成部分,父节点.子节点和兄弟节点.JQuery为这些部分提供了许多丰富易用的方法. <div c ...
- JQuery官方学习资料(译):操作元素
获取和设置元素的信息 有很多种方式可以改变现有的元素,最常见的是改变HTML内容或者元素的属性.JQuery提供了简单的夸浏览器的方法来帮助你实现元素信息的获取和设置. .html():获 ...
随机推荐
- ARM指令学习
跳转指令 直接向程序计数器PC写入i跳转地址值,可以实现在4GB的地址空间中的任意跳转. ARM跳转指令可以完成向前或向后的32MB的地址空间的跳转. -B 跳转指令 -BL 带返回的跳转指令 -BL ...
- ASP.NET Core 微服务初探[2]:熔断降级之Polly
当我们从单体架构迁移到微服务模式时,其中一个比较大的变化就是模块(业务,服务等)间的调用方式.在以前,一个业务流程的执行在一个进程中就完成了,但是在微服务模式下可能会分散到2到10个,甚至更多的机器( ...
- 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒
[源码下载] 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒 作者:webabcd ...
- Javascript高级编程学习笔记(27)—— BOM(1)window对象1
ECMAScript是JS的核心 但是对于在浏览器中运行的JS,BOM显然才是真正的核心 我们知道JS是由三个部分组成的 BOM.DOM.ECMAScript 之前的文章我们主要介绍的是ECMAScr ...
- Docker学习笔记-Docker for Windows 安装
前言: 环境:windows10专业版 64位 正文: 官方下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-windo ...
- 微信昵称的emoji的尝试性解决方案
概述 之前分享过前端页面使用emoji,讨论了前端页面使用emoji的方法,但是微信昵称中的emoji怎么获取和显示呢?我查找了一些资料,把心得记录下来,供以后开发时参考,相信对其他人也有用. 转码问 ...
- Kali学习笔记20:缓冲区溢出实验环境准备
在前几篇的博客中:我介绍了OpenVAS和Nessus这两个强大的自动化漏洞扫描器 但是,在计算机领域中有种叫做0day漏洞:没有公开只掌握在某些人手中 那么,这些0day漏洞是如何被发现的呢? 接下 ...
- LabVIEW(三):定时与触发
一.定时 多功能数据采集板卡的时钟特性,举例为M系列定时引擎:板卡上控制采集和波形发生的三个时钟:AI Sample Clock.AI Convert Clock.AO Sample Clock.所有 ...
- Linux基本命令大全
linux的基本命令 增 mKdir test # 创建一个名为test的文件夹 mkdir -p test1/test2/test3 # 递归创建directory mkdir -p {aaa,bb ...
- 导出到word
导出到excel功能会常做,但是导出到word功能很少做,项目遇到,在这里做一下标记. 导出到excel比较容易,excel都有固定格式也模板,但是word需要自己写模板,这里用了freemarker ...