JS 学习笔记--11---内置对象(Global/Math)
练习中使用的浏览器是IE10,如果各位朋友有不同意见或者遇到浏览器不兼容问题,希望指正
1、内置对象的定义:有ECMAScript实现提供的、不依赖与宿主环境的对象,在ECMAScript运行之前就已经创建好的对象就叫做内置对象。就是说,是不需要我们开发人员先是的实例化对象就能够调用和运行的对象。 在ECM-262中只是定义了两个内置对象 Global和Math对象
2、Global对象
Global(全局)对象是在ECMAScript中是一个特别的对象,因为这个对象是不存在的。在ECMAScript 中任何不属于其他对象的方法和属性都是这个对象的方法和属性。所有事实上并不存在什么全局属性和全局函数,因为一切全局的函数和属性都是这个Global对象的方法和属性。但是由于这个对象并不是真真存在的,并且ECMAScript也没有定义怎样定义和调用这个对象,故所有Global.属性和Global.()都是无效的,但是在WEB浏览器中中把Global对象作为window对象的一部分实现了,故一切的所谓的全局属性和方法都是window对象的方法和属性。
//ECMAScript 中没有定义怎么调用Global对象,故Global.属性 或者Global.方法 都是无效的
//Web浏览器中将global作为window对象的一部分来加以实现
alert(window); //object Window
alert(Global); //error Global not undefined var box='abc';
alert(window.box); //abc
alert(Global.box); //error function run(){
return 'abc';
}
alert(window.run()); //abc
alert(global.run()); //error global not undefined
alert(Global.run()); //error global not undefined
3、URI编码方法--Global对象的内置方法
URI编码方法可以编码连接,以便发送给浏览器,采用特殊的UTF-8编码特殊的不认识的字符,比如在浏览器的地址栏中有汉字的时候,IE显示的结果就是编码的,如果不编码或者编码浏览器不认识,就会显示一个乱码结果就是找不到连接中所要请求的页面
encodeURI(box): 对变量box进行编码,但是这个方法不能够对URI本身特殊字符编码,比如 正斜杠,#,冒号,问号等不会编码,但是会编码汉字等
encodeURIComponent(box): 完全编码,它会将发现的URI中所有的非标准字符进行编码。因为编码彻底,故使用的频率要比不完全编码(encodeURI())方法多很多。
//编码方法 encodeURI() encodeURIComponent()
//encodeURI()不会对斜杠,冒号问号和#等编码 encodeURIComponent则会对它发现的全部非标准字符进行编码
var box='//abc??123::hhh|||但是';
alert(box);
alert(encodeURI(box)); //结果为: //abc??123::hhh%7C%7C%7C%E4%BD%86%E6%98%AF
alert(encodeURIComponent(box)); //结果为: %2F%2Fabc%3F%3F123%3A%3Ahhh%7C%7C%7C%E4%BD%86%E6%98%AF
4、URI解码方法--Global对象的内置方法
通过上面两种编码方法进行编码的URI,可以通过解码方法进行解码。然后还原可读的URI
decodeURI(): 用来解码由编码方法 encodeURI()编码的URI
decodeURIComponent(): 用来解码由编码方法 encodeURIComponent() 编码的URI
解码方法和编码方法最好对应的使用,用什么方法编码,就用对应的方法进行解码,否则可能会造成解码不出来或者解码不完整
//解码方法decodeURI() decodeURIComponent() 解码方法必须要和编码的方法进行对应使用,否则可能解码不彻底
//下面的例子中不完全解码就不能够解码完全编码中关于特殊字符的编码结果,虽然完全解码将不完全编码结果解码正确
//但是也不要这样套用,函数、命令等最好是成套使用
var box='//abc??123::hhh|||但是';
var code1=encodeURI(box); //用不完全编码方式进行编码
var code2=encodeURIComponent(box); //用完全编码方式进行编码
alert(decodeURI(code1)); //用不完全解码方式解码不完全编码结果: //abc??123::hhh|||但是
alert(decodeURI(code2)); //用不完全解码方式解码完全编码结果: %2F%2Fabc%3F%3F123%3A%3Ahhh|||但是
alert(decodeURIComponent(code1)); //用完全解码方式解码不完全编码结果://abc??123::hhh|||但是
alert(decodeURIComponent(code2)); //用完全解码方式解码完全编码结果: //abc??123::hhh|||但是
5、eval 方法--Global对象内置方法
eval()方法是用来担当一个字符串解析器的作用,只是接收一个参数,而这个参数中就是要执行的JS代码,多余的参数会忽略的,此方法可能有返回值也可能没,要根据参数中的JS代码而定,在AJAX中传递参数的时候很有用
如果解析的字符串中的JS代码是定义变量,比如说数组对象,字符串等代码,则会返回这些定义结果,并且还原真正的类型;如果是定义一个函数或者调用一个函数,则没有返回值
//eval() 方法用来解析字符串,只是接受一个参数,这个参数中就是要执行的JS代码,在AJAX中用来传递参数很频繁使用
var box='alert("wo shi zai zi fu chuan zhong di JS dai ma !!!")';
alert(box); // alert("wo shi zai zi fu chuan zhong di JS dai ma !!!")
eval(box); // wo shi zai zi fu chuan zhong di JS dai ma !!! var box='alert("abc")'; //注意要写正确这里面的JS代码
alert(box); //alert("abc")
alert(eval(box)); //先输出:abc 这是eval解析字符串box的结果,然后输出 undefined 说明此时eval方法没有返回值 //下面方法说明,在eval方法解析某种字面量变量的时候,返回的就是这个字面量的值
var box="[3,4,5,6]";
alert(box); // [3,4,5,6]
var res=eval(box);
alert(res); // 3,4,5,6 eval() 方法将解析的结果返回,是一个数组 var box='"234"';
alert(typeof eval(box)); //string
alert(eval(box)); //
如果字符串中定义有函数,或者变量等,和正则表达式中的一些属性一样,需要先执行以下,也就是说先解析一下(eval(box));然后后面的语句中就可以调用这个字符串中定义的方法了
//如果字符串中含有方法或者变量的时候,是需要先解析一次字符串,然后就可以调用和执行字符串中的方法,
var box='var run=123;function sum(){return 123;}';
//alert(sum()); // error: not undefiend
//alert(run); // error: not undefined
eval(box); //解析一次,就将box中最原始的JS代码进行了还原,
alert(sum()); // 123 上面通过eval方法解析了字符串 box 知道定义了一个方法名为sum
alert(run); //
eval() 方法虽然很好用,功能很强大,但是也是很危险的方法,因此在使用的时候应该谨慎使用。特别是在用户输入数据的时候,很可能会导致程序的安全性问题,比如代码注入等等
6、Global 内置的一些属性
有很多属性,比如 undefined,Array,NaN,Object,Function 等,alert(Array);返回的就是数组类型Array的构造函数,也就是调用Array.constructor 时候的返回值
7、window对象
前面说了,由于无法对Global对象进行全局访问,而Web对象把window对象当做全局对象来访问,alert(window.Array);的结果和上面是一样返回的是数组的构造方法
8、Math对象
Math对象是ECMAScript为了保存数学公式和信息而提供的一个对象,这个对象中的属性和方法的执行效率要比我们直接在JS中编写数学公式的效率高很多
9、Math对象的属性
Math对象的属性都是在平时的计算中很多时候都会用到的一些特殊的值,注意大小写
|
//Math 对象的属性 注意都是大写 下面这些属性都是Math对象内置的属性
alert(Math.E); // 自然数e:2.718281828459045
alert(Math.PI); // 圆周率π:3.141592653589793
alert(Math.LN10); // 10 的自然对数:2.302585092994046
alert(Math.LN2); // 2 的自然对数:0.6931471805599453
alert(Math.LOG2E); // 以2为底,e 的对数:1.4426950408889633
alert(Math.LOG10E); // 以 10 为底,e 的对数:0.4342944819032518
alert(Math.SQRT2); // 2 的开平方根:1.4142135623730951
alert(Math.SQRT1_2); // 1/2 的开平方根:0.7071067811865476 //证明了上面这都是内置的一些属性
alert(Math.LN20); //undefined
alert(Math.LOG5E); //undefined
alert(Math.SQRT1_4);//undefined
alert(Math.SQRT9); //undefined
10、min()、max() 方法
返回的是一组数中的最大值和最小值,前提是这一组数中必须全部能够成功的通过隐试转换成数值,也就是说可以包含数值型字符串,但是不能够包含非数值型字符串,否则会返回NaN。
不能够传递一个数组进去,返回的也是NaN,只能这样使用 Math.min(2,3,4,5,'7',1);
// min() max() 用来求一组数中的最大值和最小值
alert(Math.min(3,5,6,7,8,9)); //
alert(Math.max(3,5,6,7,8,9)); // //数值行字符串自动转换
alert(Math.min('3',4,9,10,'5','6')); //
alert(Math.max('3',4,9,'10',5,'6')); // //如果不能够转换其中的任何一个数字,返回的是NaN;转换的时候应该是调用的Number(x)方法进行转换的
alert(Math.min('abc',4,9,10,'5','6')); //NaN
alert(Math.max('abc',4,9,'10',5,'6')); //NaN
alert(Math.max(3,4,9,10,5,'6abc')); //NaN //不支持传递一个数组进去
var box=[2,3,4,5,6,7,8];
alert(Math.min(box)); //NaN
alert(Math.max(box)); //NaN
//alert(box.min()); //不提供此方法
alert(box.min); //undefined
11、舍入方法
Math.ceil(num):将num向上舍入到里这个数最近的一个整数。Math.ceil(5.1)==6为true
Math.floor(num):将num向下舍去,即它总是将数值向下舍入为最接近的整数;取整
Math.round(num):四舍五入方法,
这些方法同样能够接收数值型的字符串('5'),因为内部会隐试的调用Number()转换方法,只是处理传入进去的第一个参数,其余的参数会被忽略掉
// 舍入方法 ceil() floor() round() 只是接受一个参数,多余的会忽略掉
//ceil() 方法 就是向上舍入,将小数点后面的数值向上舍入为最近的整数
alert(Math.ceil(5.9)); //
alert(Math.ceil(5.5)); //
alert(Math.ceil(5.1)); //
alert(Math.ceil('5.1')); //6 自动调用内置的转换方法Number()方法
alert(Math.ceil('5.1a')); //NaN //floor() 方法,就是向下舍去,将小数点后面的数值向下舍为最近的整数
alert(Math.floor(5.9)); //
alert(Math.floor(5.5)); //
alert(Math.floor(5.1)); //
alert(Math.floor('5.1')); //5 自动调用内置的转换方法 Number()方法
alert(Math.floor('5.1a')); //NaN // round() 方法,对参数进行四舍五入
alert(Math.round(5.9)); //
alert(Math.round(5.5)); //
alert(Math.round(5.1)); //
alert(Math.round('5.1')); //
alert(Math.round('5.1a')); //NaN alert(Math.round(5.4,6.7)); //
12、random 方法
这个方法是产生一个0到1之间的随机数,但是不包括0和1,Math.random() 即可
但是很多时候需要返回的是一个自定义的范围的随机数,可以采用一个公式:Math.floor(Math.random()*总数+起始数)。这个总数,并不是范围的结束数,而是通过计算而得:总数=结束数-起始数+1。由于随机数返回的是一个浮点数,故还要通过向下取整来进行舍入
可以通过函数的方法可以进行一个封装,传递两个参数,起始数和结尾数,返回一个符合此范围的随机数:
// 随机数 random 方法 用来返回的是0到1之间的一个随机数
var box=Math.random(); // 产生一个0到1之间的随机数
alert(box); //产生10个0到1之间的随机数,并且输出到界面上
for(var i=0;i<10;i++){
document.write(Math.random());
document.write('<br />');
} //产生的是9到14之间的随机数 本来是想产生5~10之间的整数
for(var i=0;i<10;i++){
document.write(Math.random()*10+5);
document.write("<br />");
} //为了解决上面的问题,可以采用公式:Math.random()*总数+起始数; 其中 总数=结束数-起始数+1;原因不解释
//接收两个参数,返回在这两个参数之间的随机整数。
function ran(start,end){
var count=end-start+1;
return Math.floor(Math.random()*count+start);//产生一个符合区间的随机数,然后向下取整,
} for(var i=0;i<10;i++){
document.write(ran(5,10)); //产生5~10之间的一个随机数
document.write("<br />");
}
13、其它的数学方法
|
求正切的时候结果不是很精确:alert(Math.tan(Math.PI/4)); //0.99999999999
//其他的一些方法
alert(Math.abs(-3)); //3 取绝对值方法
alert(Math.exp(3)); //20.085536923187668 自然数 e 的3次方,传递的参数可变的 alert(Math.LN10); //属性,返回10的自然对数
//返回一个数的自然对数,就是以 e 为底的自然对数
alert(Math.log(10));
alert(Math.log(100));
alert(Math.log(9)); // Math.pow(num,power) 返回的是num数据的power次幂
alert(Math.pow(2,3)); //
alert(Math.pow(4,2)); // // Math.sqrt(num) 返回数据 num 的平方根
//这两个是属性中的开平方根
alert(Math.SQRT2);
alert(Math.SQRT1_2);
//下面才是方法的使用
alert(Math.sqrt(9)); //
alert(Math.sqrt(100)); // // 三角函数 是以弧度为单位
alert(Math.sin(90)); //0.8939966636005578
alert(Math.sin(Math.PI/2)); //1
alert(Math.cos(Math.PI/4)); //余弦
alert(Math.tan(Math.PI/4)); //0.99999999999 正切 //求反正切 Math.atan(x); 返回的也是弧度值
alert(Math.atan(1)); //0.7853981633974483
alert(Math.PI/4); //0.7853981633974483
//Math.atan2(x,y);返回的是x/y的反正切值
alert(Math.atan2(4,2)); //1.1071487177940904
alert(Math.atan(2)); //1.1071487177940904 //反余弦与反正弦
alert(Math.asin(1)); //1.5707963267948965
alert(Math.PI/2); //1.5707963267948965
alert(Math.acos(1)); //
alert(Math.acos(-1)); //3.141592653589793
alert(Math.PI); //3.141592653589793
JS 学习笔记--11---内置对象(Global/Math)的更多相关文章
- js学习---常用的内置对象(API)小结 :
内置对象(API): 日期 Date: getFullYear() 返回完整的4位的年份 如:2016 getMonth() 返回月份,从0开始 getDate() 返回当前月的第几天,当 ...
- java web 学习笔记 jsp内置对象
jsp2 表达式语言的内置对象 使用方式${object.attributename} 或者${object["attributename"]} pageContext pageS ...
- 【学习】js学习笔记:内置顶层函数eval()的兼容用法
今天学了一个内置顶层函数,eval();其作用是将字符串转换成javascript命令执行,但必须符合语法,否则会报错. 如果写成window.eval(),则其定义的变量会在全局生效. 但是,在IE ...
- JavaWeb学习笔记——jsp内置对象
- 单体内置对象 Global 和 Math
单体内置对象 Global 和 Math 在所有代码执行前,作用域中就已经存在两个内置对象:Global(全局)和Math.在大多数ES实现中都不能直接访问Global对象.不过,WEB浏览器实现了承 ...
- 单体内置对象——Global对象
单体内置对象的定义:由ECMAScript实现提供的.不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前已经存在了.意思就是说:开发人员不必显式地实例化内置对象,因为他们已经实例化了. ...
- jsp笔记3(内置对象)
jsp脚本中的9个内置对象: 1.application:javax.servlet.ServletContext的实例对象,该实例对象代表jsp所属的web应用本身,可用于在jsp页面或Servle ...
- 内置对象(Math对象、Date对象、Array对象、String对象)常用属性和方法
Math对象 Math 是一个内置对象, 它具有数学常数和函数的属性和方法.不是一个函数对象. 与其它全局对象不同的是, Math 不是一个构造函数. Math 的所有属性和方法都是静态的. 跟数学 ...
- python自动化测试学习笔记-4内置函数,处理json
函数.全局变量 写代码时注意的几点事项: 1.一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改,其次全局变量会一直占用系统内容. 2.函数里如果有多个r ...
随机推荐
- Objective-C基本数据类型、表达式和语句
一.基本数据类型 1.一般的计算机语言在定义变量的时候,需要提供给两个内容:类型和名字. 比如:int myClassID; 2.在Xcode中,无论你使用的是GCC编译器还是LLVM编译器,如果我们 ...
- 设置peoplecode trace
Configuring PeopleCode Trace Select PeopleTools, Utilities, Debug, Trace PeopleCode to access the Tr ...
- Custom Sort Order
When trying to sort based on values that do not fit the standard ascending and descending sort logic ...
- Nginx配置:http重定向,URLRewrite,一个简单框架的配置思路
一个重定向的应用配置: server { listen 8000; server_name localhost; root F:/home/projects/test; index ...
- 【转】Messagedlg
) = mrYes then Close; MessageDlg用法 对话框类型:mtwarning——含有感叹号的警告对话框mterror——含有红色叉符号的错误对话框mtinformation ...
- PHP搜索MYSQL数据库加分页浏览小结
PHP搜索加分页浏览小结: 1 分页后再做搜索 2 这里对于url的拼接,以及模糊查询,搜索时候的显示添加,SQL语句的拼接 3 对于页面传递过来的超级链接的变量,如果不存在就要设置,对于可能抛出异常 ...
- 使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建
首先先说一下什么是WIF(Windows Identity Foundation).由于各种历史原因,身份验证和标识的管理一般都比较无规律可循.在软件里加入“身份验证”功能意味着要在你的代码里混进处理 ...
- [terry笔记]Flashback
flashback 闪回,主要功能有两个:闪回查询(flashback query).闪回恢复(flashback table/database) 开启闪回flashback功能(归档下才可开启数据库 ...
- 改用二进制启动Moses translation model提示Can't read ~/working/binarised-model/reordering-table
解决方案: 换成 /home/用户名/working 貌似就好使了...但是时间还是估计太长,明早挂机一天试试,顺便把manual 的详细部分看了
- iphone/ipad关于size, frame and bounds总结和UIScroll view学习笔记
1. iphone/ipad大小 Device Screen dimensions(in points) iphone and ipod 320 X 480 ipad 768 X 1024 2. UI ...