js理论相关知识(一)

1、! 与 !!

  1. ‘!’ 可将变量转换成boolean类型,null、undefined和空字符串取反都为false,其余都为true。
    在javascript中:
    以下内容会被当成false处理:"" , false , 0 , null , undefined , NaN
console.log(!undefined); // true
console.log(!null); // true
console.log(!''); // true
console.log(!' ') // false
console.log(!0) // true
console.log(!0) // true
console.log(!NaN) // true
  1. ‘!!’ 常常用来做类型判断,在第一步!(变量)之后再做逻辑取反运算,在js中新手常常会写这样臃肿的代码:
    判断变量a为非空,未定义或者非空串才能执行方法体的内容
// 新手判断 a 有内容或非空
var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
    //a有内容才执行的代码  
}
// 老手
if(!!a){
    //a有内容才执行的代码...  
}

引用:http://www.cnblogs.com/tison/p/8111712.html

2、new Function()将字符串转为对象

  1. 在JS中将字符串 “type: ‘progressbar’,data:demo3” 神奇的变为对象
var s=(new Function("return ({" + "type:'progressbar',data:'demo3'" + "})"))();
console.log(s);  // Object { type: "progressbar", data: "demo3" }
  1. 查阅了资料发现 文章一文章二
// 文章1
var message = new Function('msg','alert(msg)');
// 等价于:
function message(msg) {
    alert(msg);
}
// 文章2
var a = 'global scope'
function b(){
	var a = 'local scope'
	eval('console.log(a)'); //local scope
	(new Function('','console.log(a)'))() //global scope
}
b();
// eval中的代码执行时的作用域为当前作用域。它可以访问到函数中的局部变量。
// new Function中的代码执行时的作用域为全局作用域,不论它的在哪个地方调用的。所以它访问的
// 是全局变量a。它根本无法访问b函数内的局部变量。

那么(1、)中的代码改写为如下,结果没有发生改变。

var s=(new Function("","return ({" + "type:'progressbar',data:'demo3'" + "})"))();
console.log(s);  // Object { type: "progressbar", data: "demo3" }

那么将文章2中代码改写为下

var a = 'local scope';
function b() {
	(new Function('console.log(a)'))() //global scope
}
b();	// local scope

结果依旧没有改变。那么测试以下代码

1var cc= new Function('aa','console.log(aa)');
cc('孙悟空'); // 孙悟空
2var cc1= new Function('','console.log("牛魔王")');
cc1('孙悟空'); // 牛魔王
3var cc2= new Function('console.log("猪八戒")');
cc2('孙悟空'); // 猪八戒

由此可见,当new Function 创建的函数并不需要参数时,Function 的第一个参数可写可不写;
以上代码均在火狐浏览器中测试。

文章一引用:https://www.cnblogs.com/pizitai/p/6427433.html
文章二引用:https://www.cnblogs.com/zhangfengyang/p/5526024.html

3、彻底理解 js 中 && 和 ||

  1. 现象:
    javascript中,&&和||的用法比较神奇,经常用在对象上,例如a || b,如果a不存在,则返回b。a && b,如果a存在,则返回b,否则返回a。
    光这样看,感觉他的概念还挺复杂的,这样去想的话,不但会在脑子里多出一个无用的概念,而且越记越混乱。看问题还是要看本质。
  2. 本质:
    本质是什么呢?&& 和 || 的作用只有一个(定义):
    进行布尔值的且和或的运算。当运算到某一个变量就得出最终结果之后,就返回哪个变量。
  3. 说明
    在javascript中:
    以下内容会被当成false处理:"" , false , 0 , null , undefined , NaN
    其他都是true。注意:字符串"false"也会被当做true处理,在未转型的情况下他是字符串,属于一个对象,所以是true。
    所以:
    a || b:如果a是true,那么b不管是true还是false,都返回true。因此不用判断b了,这个时候刚好判断到a,因此返回a。
    如果a是false,那么就要判断b,如果b是true,那么返回true,如果b是false,返回false,其实不就是返回b了吗。
    a && b:如果a是false,那么b不管是true还是false,都返回false,因此不用判断b了,这个时候刚好判断到a,因此返回a。
    如果a是true,那么就要在判断b,和刚刚一样,不管b是true是false,都返回b。
  4. 来个复杂的例子(注意一点:在js中&&运算符优先级大于||)
    假设:
var a=new Object(),b=0,c=Number.NaN,d=1,e="Hello"; 
console.log(a || b && c || d && e);    // Object {}
  1. 表达式从左往右执行,先&&后||
    5.1、(b && c):b是false,此时不需要判断c,因为不管c是true是false,最终结果一定是false,因此返回当前判断对象b,也就是0;
    5.2 、(d && e):d是true,这个时候判断e,此时不管e是true,是false,返回结果一定是e,e为true,因此返回"Hello";
    5.3、(a || b):a是true,此时不管b是true是false,结果都是true,所以不判断b,所以返回当前判断对象a,因此返回new Object();
    5.4、(a || e):同上,因此返回a。
    这个表达式最终结果为a,也就是new Object()

文章引用:https://www.cnblogs.com/sgzs/p/7977208.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML是一种标记语言,用于创建Web页面。以下是一些HTML的基本理论知识和示例代码: 1. HTML标签用尖括号括起来,例如:`<html>`。 2. HTML文档以`<!DOCTYPE html>`开头。 3. HTML文档由`<html>`标签包含,其余内容都在`<html>`标签内部。 4. `<head>`标签包含页面元数据,如标题、样式表和脚本。 5. `<body>`标签包含页面内容。 6. `<h1>`到`<h6>`标签用于创建标题。 7. `<p>`标签用于创建段落。 8. `<a>`标签用于创建链接,例如:`<a href="http://www.example.com">链接文本</a>`。 9. `<img>`标签用于插入图像,例如:`<img src="image.jpg" alt="图像描述">`。 10. `<ul>`和`<ol>`标签用于创建无序和有序列表。 11. `<table>`标签用于创建表格。 12. `<form>`标签用于创建表单,如登录表单和搜索表单。 13. `<input>`标签用于创建表单输入字段,如文本框、单选按钮和复选框。 示例代码: ```html <!DOCTYPE html> <html> <head> <title>页面标题</title> <link rel="stylesheet" href="style.css"> <script src="script.js"></script> </head> <body> <h1>这是一个标题</h1> <p>这是一个段落。</p> <a href="http://www.example.com">链接文本</a> <img src="image.jpg" alt="图像描述"> <ul> <li>无序列表项1</li> <li>无序列表项2</li> </ul> <ol> <li>有序列表项1</li> <li>有序列表项2</li> </ol> <table> <tr> <th>表头1</th> <th>表头2</th> </tr> <tr> <td>表格单元格1</td> <td>表格单元格2</td> </tr> </table> <form> <label>用户名:</label> <input type="text" name="username"> <br> <label>密码:</label> <input type="password" name="password"> <br> <input type="submit" value="登录"> </form> </body> </html> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值