2022-12-13 什么是语法糖?JS中常见的语法糖有哪些?

本文介绍了JavaScript中的各种语法糖,包括对象字面量、箭头函数、解构赋值等特性,通过这些特性可以使代码更加简洁易读。

0.前言

常常听到语法糖这个说法,模模糊糊半懂不懂,借此机会了解一下相关概念,记录如下

1.定义
  • 语法糖(syntactic sugar)是指编程语言中可以更容易的表达一个操作的语法,
    使操作变得更加清晰方便,更符合编程习惯
  • 通俗理解就是一种便捷写法,如果去掉不用,也不会影响语言的表达,因为处理程序本身就会把语法糖构件转换成更加基础的构件
2.常见语法糖
2.1.对象字面量
let sex1 = 'man', sex2 = ‘woman’
let sex = {man,woman}  
2.2.箭头函数
/*普通函数*/
let fun = function(params){}
/*箭头函数(语法糖)*/
let fun= params =>{}
//当参数有两个及以上时,如下:
let fun= (params1,params2,,,)=>{}
2.3.解构赋值(数组)
/*数组*/
let arr = ['a','b','c'];
let {a,b} = arr;////数组解构
let {a,,c} = arr;//数组解构可以跳过不想用到的值,只需在对应地方留白
2.4.函数默认参数
function  getResponse(a,b=0) {}  //常用于请求数据时,设置默认值 
2.5.拓展运算符
function test() {
  return [...arguments]
}
test('a', 'b', 'c') // ['a','b','c']
//扩展符还可以拼合数组
 let all = ['1',...['2','3'],...['4','5'],'6']   // ["1", "2", "3", "4", "5", "6"]
2.6.模板字符串
let id = '小狐狸'
let blog = '博主id是:${id}' // 博主id是是:小狐狸
2.7.多行字符串
//利用反引号实现多行字符串(虽然回车换行也是同一个字符串)
let poem = `A Pledge
			By heaven,
			I shall love you`
2.8.拆包表达式
const data = {
      a: 'a',
      b: 'b',
      c: 'c'
}
let {a,c} = data
2.9.ES6的类
class helloJs{
// 构造方法
  constructor(options = {}, data = []) { 
        this.name = '小狐狸';
        this.data = data;
        this.options = options;
    }
 // 成员方法
    getName() { 
        return this.name;
    }
}
2.10.模板化开发
// 新建一个util.js 文件夹
let formatTime = date=>{
	....
}
let endTime = date=>{
	....
}
module.exports = {
   formatTime,
   endTime,
}
//可以用import {名称} from '模块' 
//然后再同级目录创建一个js文件 引入 util.js
//import {endTime} from 'util'
//或者全部引入
//import util from 'util'
### v-model 的实现原理与语法糖机制 在 Vue.js 中,`v-model` 是一个用于实现双向绑定的语法糖。它的核心机制是基于 `v-bind` 和 `v-on` 的组合来完成数据的同步和更新[^1]。 以普通的 `<input>` 输入框为例,`v-model` 的实现可以分解为以下形式: ```html <input type="text" :value="message" @input="message = $event.target.value"> ``` 上述代码中,`:value="message"` 表示通过 `v-bind` 将父组件中的 `message` 数据绑定到子组件(或 DOM 元素)的 `value` 属性上。而 `@input="message = $event.target.value"` 则表示通过 `v-on` 监听 `input` 事件,并将用户的输入值重新赋值给 `message` 变量。这种机制确保了数据的双向绑定效果[^1]。 在 Vue 3 中,`v-model` 的实现更加灵活,支持自定义指令以及多属性绑定。例如,在组件中使用 `v-model` 时,Vue 内部会自动映射 `value` 属性和 `update:value` 事件[^2]。这意味着,当父组件通过 `v-model` 绑定某个值时,该值会被传递到子组件的 `props` 中(默认名为 `modelValue`),而子组件可以通过触发 `update:modelValue` 事件通知父组件更新数据[^3]。 以下是基于 Vue 3 的父子组件通信示例,展示了如何通过 `v-model` 实现双向绑定: ```vue <!-- 父组件 --> <template> <ChildComponent v-model="parentMessage" /> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from Parent' }; } }; </script> <!-- 子组件 --> <template> <input type="text" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" /> </template> <script> export default { props: ['modelValue'], emits: ['update:modelValue'] }; </script> ``` 在这个例子中,父组件通过 `v-model` 将 `parentMessage` 绑定到子组件的 `modelValue` 属性。子组件通过监听 `input` 事件并触发 `update:modelValue` 事件,实现了数据从子组件到父组件的更新。 ### Vue 3 中的 `defineModel` 优化 Vue 3 引入了 `defineModel` 方法,进一步简化了 `v-model` 的实现方式。开发者可以直接在脚本部分定义模型,无需手动声明 `props` 和 `emits`。这种方式使得代码更加简洁且易于维护[^2]。 ```javascript <script setup> const model = defineModel(); </script> <template> <input type="text" v-model="model" /> </template> ``` 以上代码通过 `defineModel` 自动处理了 `props` 和 `emits` 的绑定逻辑,减少了手动配置的工作量。 ### 总结 `v-model` 的实现原理本质上是基于 `v-bind` 和 `v-on` 的组合,通过绑定属性和监听事件完成了数据的双向绑定。在 Vue 3 中,`v-model` 的灵活性得到了增强,支持多属性绑定和自定义指令。同时,`defineModel` 的引入进一步简化了开发流程,提升了代码的可读性和维护性[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值